C++ File文件处理 删除文件和文件夹目录

C++ File文件处理 删除文件和文件夹目录

在C++程序开发中,也会遇到很多文件上传,文件写入等对于文件的操作业务需要开发,文件处理也是任何应用程序的重要组成部分。C++有几种创建,读取,更新和删除文件的方法。本文主要介绍C++ File文件操作删除文件和目录。



1、删除文件

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

例如,

#include<iostream>
#include<cstdio>
#include <string.h>
using namespace std;
int main()
    char *savePath = "/home/cjavapy/hello.txt";
    if(remove(savePath)==0)
        cout<<"删除成功"<<endl;
        cout<<"删除失败"<<endl;
    //输出错误信息
    cout << strerror(errno);
    return 0;

错误代码:

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

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

3) ENAMETOOLONG 参数 filename 太长。

4) ENOMEM 核心内存不足。

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

6) EIO I/O存取错误。


2、删除文件夹

除了能删除文件,也可以使用 int rmdir( const char *dirname ); 删除文件夹。删除成功则返回 0 ,失败则返回 -1 ,错误原因存于 errno 。但是,删除的文件夹必须为空:

例如,

#include <unistd.h>
#include <stdlib.h> /* for system()函数 */
#include<iostream>
#include<cstdio>
#include <string.h>
using namespace std;
int main( void )
  system("mkdir mydir");
  system("ls -l mydir");
  //getchar();
  printf("%s","删除文件夹\n");
  cout << "返回值:" << rmdir("mydir") <<endl;
  //输出错误信息
  cout << strerror(errno);
  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>
using namespace std;
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 )