#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
void main() {
try {
fs::path folde_path(R"(c:\temp)");
for (const fs::directory_entry entry : fs::recursive_directory_iterator(folde_path)) {
if (fs::is_regular_file(entry.path())) {
std::cout << "file :" << entry.path() << std::endl;
}
else if (fs::is_directory(entry.path())) {
std::cout << "folder:" << entry.path() << std::endl;
}
}
}
catch (const fs::filesystem_error& e) {
std::cout << e.what() << std::endl;
}
catch (const std::exception& e) {
std::cout << e.what() << std::endl;
}
return;
}
file :"c:\\temp\\file_1.txt"
file :"c:\\temp\\file_2.txt"
folder:"c:\\temp\\folder_1"
file :"c:\\temp\\folder_1\\file_1.txt"
folder:"c:\\temp\\folder_1\\folder_1"
folder:"c:\\temp\\folder_1\\folder_1\\folder_1"
folder:"c:\\temp\\folder_1\\folder_2"
folder:"c:\\temp\\folder_2"
folder:"c:\\temp\\folder_3"
削除する場合、fs::romoveで特定のファイル、 fs::romove_allでフォルダ配下すべてを削除
ただ、ファイルが開けれていて削除できないような場合こんな感じになります
フォルダ構成は、以下のとおりでbbb.xlsxは開いています。
c/\temp\file\aaa.txt
c/\temp\file\bbb.xlsx
c/\temp\file\ccc.txt
bbb.xlsxを消すときに、エラーとなるのでそこで例外が発生します。
エラーメッセージは、削除のメソッドに指定したパスが表示されるだけなので、どのファイルでエラーが発生したのかわかりにくいです
remove_all: プロセスはファイルにアクセスできません。別のプロセスが使用中です。: "c:\temp"
そこで、一つずつファイル、フォルダを消していくとなると、階層の深い方から順に消していくので
ソートで入れ替え、消せるファイルはすべてけすことにすると
remove: プロセスはファイルにアクセスできません。別のプロセスが使用中です。: "c:\temp\file\~$bbb.xlsx"
remove: プロセスはファイルにアクセスできません。別のプロセスが使用中です。: "c:\temp\file\bbb.xlsx"
remove: ディレクトリが空ではありません。: "c:\temp\file"