#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <direct.h>
#include <errno.h>
//判断是否是".."目录和"."目录
inline bool is_special_dir(const char *path)
{
return strcmp(path, "..") == 0 || strcmp(path, ".") == 0
}
//判断文件属性是目录还是文件
inline bool is_dir(int attrib)
{
return attrib == 16 || attrib == 18 || attrib == 20
}
//显示删除失败原因
inline void show_error(const char *file_name = NULL)
{
errno_t err
_get_errno(&err)
switch(err)
{
case ENOTEMPTY:
printf("Given path is not a directory, the directory is not empty, or the directory is either the current working directory or the root directory.\n")
break
case ENOENT:
printf("Path is invalid.\n")
break
case EACCES:
printf("%s had been opend by some application, can't delete.\n", file_name)
break
}
}
inline void get_file_path(const char *path, const char *file_name, char *file_path)
{
strcpy_s(file_path, sizeof(char) * _MAX_PATH, path)
file_path[strlen(file_path) - 1] = '\0'
strcat_s(file_path, sizeof(char) * _MAX_PATH, file_name)
strcat_s(file_path, sizeof(char) * _MAX_PATH, "\\*")
}
//递归搜索目录中文件并删除
inline void delete_file(char *path)
{
_finddata_t dir_info
_finddata_t file_info
intptr_t f_handle
char tmp_path[_MAX_PATH]
if((f_handle = _findfirst(path, &dir_info)) != -1)
{
while(_findnext(f_handle, &file_info) == 0)
{
if(is_special_dir(file_info.name))
continue
if(is_dir(file_info.attrib))//如果是目录,生成完整的路径
{
get_file_path(path, file_info.name, tmp_path)
delete_file(tmp_path)//开始递归删除目录中的内容
tmp_path[strlen(tmp_path) - 2] = '\0'
if(file_info.attrib == 20)
printf("This is system file, can't delete!\n")
else
{
//删除空目录,必须在递归返回前调用_findclose,否则无法删除目录
if(_rmdir(tmp_path) == -1)
{
show_error()//目录非空则会显示出错原因
}
}
局晌 }
else
{
strcpy_s(tmp_path, path)
tmp_path[strlen(tmp_path) - 1] = '\0'
strcat_s(tmp_path, file_info.name)//生成完整的文件路径
卜喊
if(remove(tmp_path) == -1)
{
show_error(file_info.name)
}
}
}
_findclose(f_handle)//关闭打开的文件句柄,并释放关联资源,否则无法删除空目录
}
else
{
show_error()//若路径不存在,显示错误信息
}
}
int main(int argc, char **argv)
{
delete_file("C:\\Documents and Settings\\Administrator\\Local Settings\\Temporary Internet Files\\*")
system("pause")
return 0
}
1、打开Sublime Text软件,新建一个C语言文件,然后导入C语和裤言库
2、接下来新建C语言的main函数,对文件祥宽的 *** 作都会在main函数中进行
3、接下来调用C语言的fopen函数对文件进行打开 *** 作
4、当打开文件谨棚亮以后就可以通过fgetc函数读取文件里面的内容
首先要说明的是这里并不是指删除C编译器里面的文件,呵呵,如果只是要删除那些文件的话,那就很简单,直接选中文件后按delete键就可以删除了,但让基是我们删除那些文件干嘛?我们还要用它写程序啊,呵呵。我在这里要说的是,怎样使用C语言编局销写程序来删除文件。在C语言中,我们可以使用remove()函数来删除指定的文件,具体语法为:
Int remove(char *filename)其中filename是一个指向桐滑游字符串的指针,该字符串可以组成有效的文件名,也可以包含路径说明。如果我们要删除D盘下的ABC.txt文件,我们就可以这样写:remove(“D:\ABC.txt”)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)