C++ですべてのファイル/サブディレクトリ(再帰的削除)を含むフォルダーを削除するにはどうすればよいですか?
真剣に:
system( "rm -rf /path/to/directory" )
おそらくもっとあなたが探しているものですが、UNIX固有のものです:
/* Implement system( "rm -rf" ) */
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/syslimits.h>
#include <ftw.h>
/* Call unlink or rmdir on the path, as appropriate. */
int
rm( const char *path, const struct stat *s, int flag, struct FTW *f )
{
int status;
int (*rm_func)( const char * );
switch( flag ) {
default: rm_func = unlink; break;
case FTW_DP: rm_func = rmdir;
}
if( status = rm_func( path ), status != 0 )
perror( path );
else
puts( path );
return status;
}
int
main( int argc, char **argv )
{
while( *++argv ) {
if( nftw( *argv, rm, OPEN_MAX, FTW_DEPTH )) {
perror( *argv );
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}
Boost.Filesystem からboost::remove_all
を使用できます。
ftw()
、nftw()
、readdir()
、readdir_r()
を使用して、ディレクトリをトラバースし、ファイルを再帰的に削除できます。
ただし、ftw()
、nftw()
、readdir()
はどちらもスレッドセーフではないため、代わりにreaddir_r()
をお勧めします。プログラムはマルチスレッド環境で実行されます。
標準のC++には、これを行う手段がありません。オペレーティングシステム固有のコードまたはBoostなどのクロスプラットフォームライブラリを使用する必要があります。
C++ 17以降、これに対する好ましい答えは使用することです
std::filesystem::remove_all(const std::filesystem::path& folder)
this に従って、フォルダの内容を再帰的に削除し、最後にフォルダを削除します。