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

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

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

例如,

#include

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

#include

#include /* for system()函数 */

int main( void )

{

system("mkdir mydir");

system("ls -l mydir");

//getchar();

printf("%s","删除文件夹");

rmdir("mydir");

return(0);

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

例如,

#include #include

#include

#include

#include

#include

#include

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

}

相关推荐

奇怪,为什么PPT里的超链接失效了?
365bet游戏平台

奇怪,为什么PPT里的超链接失效了?

📅 08-22 👁️ 1424
部落冲突暗黑训练营 暗黑训练营兵种升级顺序
365bet游戏平台

部落冲突暗黑训练营 暗黑训练营兵种升级顺序

📅 07-09 👁️ 5765
佳能(中国)
Bet体育365怎么提款

佳能(中国)

📅 08-05 👁️ 230
俄罗斯蓝鲸游戏50个任务指令是什么 看完脊背发寒
365bet游戏平台

俄罗斯蓝鲸游戏50个任务指令是什么 看完脊背发寒

📅 08-08 👁️ 5655
珊瑚绒、摇粒绒、法兰绒…5种“绒”面料都有什么区别你知道多少?
待哺的意思
Bet体育365怎么提款

待哺的意思

📅 09-18 👁️ 1074