C语言如何删除文件内容?

C语言如何删除文件内容?,第1张

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”)

C语言删除指定文件或目录,参考代码如下:

#include <stdio.h>

#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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11431639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存