C语言 File文件处理 删除文件

C语言中,使用 remove() 函数可以删除文件。它位于标准库 <stdio.h> 中,并尝试删除指定路径的文件。如果删除成功,则返回 0;如果失败,则返回非零值,并设置相应的错误码。文件删除是指从文件系统中移除一个文件。这个操作通常是不可逆的,一旦文件被删除,除非有备份,否则文件内容将无法恢复。本文主要介绍C语言 File文件操作删除文件。

1、删除文件

要使用C语言删除文件,需要使用int remove(char *filename);方法,filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()处理;若参数filename 为一目录,则调用rmdir()来处理。删除成功则返回0,失败则返回-1,错误原因存于errno

例如,

#include<stdio.h>
int main(){
    char filename[80]="/tmp/file.txt";
    printf("The file to delete:");
    if( remove(filename) == 0 )
        printf("Removed %s.", filename);
    else
        perror("remove");
}

错误代码:

1)EROFS  欲写入的文件为只读文件。

2)EFAULT  参数filename 指针超出可存取内存空间。

3)ENAMETOOLONG  参数filename 太长。

4)ENOMEM  核心内存不足。

5)ELOOP  参数filename 有过多符号连接问题。

6)EIO I/O存取错误。

2、删除文件夹

除了能删除文件,也可以使用int rmdir( const char *dirname );删除文件夹。但是,删除的文件夹必须为空:

例如,

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h> /* for system()函数 */

int main( void )
{
  system("mkdir mydir");
  system("ls -l mydir");
  //getchar();
  printf("%s","删除文件夹");
  rmdir("mydir");
  return(0);
}

3、删除某个目录及目录下的所有子目录和文件

删除某个目录及目录下的所有子目录和文件。remove()只能删除某个文件或者空目录,要想要删除某个目录及其所有子文件和子目录,要使用递归进行删除。

例如,

#include <stdio.h>
#include <sys/stat.h> #include <unistd.h> #include <stdlib.h> #include <errno.h> #include <dirent.h> #include <string.h> void error_quit( const char *msg ) { perror( msg ); exit( -1 ); } void change_path( const char *path ) { printf( "Leave %s Successed . . .\n", getcwd( NULL, 0 ) ); if ( chdir( path ) == -1 ) error_quit( "chdir" ); printf( "Entry %s Successed . . .\n", getcwd( NULL, 0 ) ); } void rm_dir( const char *path ) { DIR *dir; struct dirent *dirp; struct stat buf; char *p = getcwd( NULL, 0 ); if ( (dir = opendir( path ) ) == NULL ) error_quit( "OpenDir" ); change_path( path ); while ( dirp = readdir( dir ) ) { if ( (strcmp( dirp->d_name, "." ) == 0) || (strcmp( dirp->d_name, ".." ) == 0) ) continue; if ( stat( dirp->d_name, &buf ) == -1 ) error_quit( "stat" ); if ( S_ISDIR( buf.st_mode ) ) { rm_dir( dirp->d_name ); /*if(rmdir(dirp->d_name)==-1) * error_quit("rmdir"); * printf("rm %s Successed . . .\n",dirp->d_name);*/ continue; } if ( remove( dirp->d_name ) == -1 ) error_quit( "remove" ); printf( "rm %s Successed . . .\n", dirp->d_name ); } closedir( dir ); change_path( p ); if ( rmdir( path ) == -1 ) error_quit( "rmdir" ); printf( "rm %s Successed . . .\n", path ); } int main( int argc, char **argv ) { // if ( argc < 2 ) //{ //fprintf( stderr, "<用法>: %s + pathname", argv[0] ); //return(-1); //} rm_dir("/tmp/"); return(0); }

推荐阅读
cjavapy编程之路首页