#c #visual-studio #filesystems
Вопрос:
Я пытаюсь извлечь все файлы из корневого каталога (C:/) на C
Прежде всего, я извлекаю все логические диски на компьютере, затем я использую библиотеку файловой системы std:: (в частности, функцию recursive_directory_iterator для циклического поиска в каталогах)
DWORD dwSize = MAX_PATH;
char szLogicalDrives[MAX_PATH] = { 0 };
DWORD dwResult = GetLogicalDriveStrings(dwSize, szLogicalDrives);
if (dwResult > 0 amp;amp; dwResult <= MAX_PATH)
{
char* szSingleDrive = szLogicalDrives;
while (*szSingleDrive)
{
szSingleDrive[strlen(szSingleDrive) - 1] = 0;
printf(szSingleDrive);
for (fs::directory_entry p : std::filesystem::recursive_directory_iterator(szSingleDrive))
{
string filePath = p.path().string();
// Vérification du type de l'objet
if (fs::is_regular_file(p.path()))
{
cout << filePath << endl;
}
// get the next drive
szSingleDrive = strlen(szSingleDrive) 1;
}
}
}
Однако результат, который я получаю, — это путь моего проекта.
Например : C:x64DebugmyProject.exe
Желаемый результат : C:Users, C:Windows, C:Program Файлы…
Комментарии:
1. Спросите себя, что делает эта строка (
szSingleDrive[strlen(szSingleDrive) - 1] = 0;
) и почему она существует.2. Послесловие
К: не для украшения. Кроме того, почему вы сравниваете bool с
std::string::npos
?3.
if (fs::is_regular_file(p.path()) == string::npos)
должно бытьif (fs::is_regular_file(p.path()))
или прощеif (p.is_regular_file())
4. @RemyLebeau, да, я виноват, я отредактировал код STF перед публикацией, чтобы удалить ненужную информацию. Эта строка была для : if (fs::is_regular_file(p.путь()) amp;amp; Путь к файлу.найти(кроме пути.строка()) == строка::npo) , где кроме пути = C:\Windows, чтобы исключить этот путь
5. @Botje да, я попытался с «C:\», но файловая система выдала ошибку : Необработанное исключение в 0x00007FFBE0384ED9 в program.exe: Исключение Microsoft C : std::файловая система::ошибка файловой системы в ячейке памяти 0x000000AE6953F1F0. Вы когда-нибудь пытались запустить функцию recusive_driectory в корневом пути ?
Ответ №1:
Чтобы решить проблему, мне пришлось запустить VS 2019 в администраторе (или запустить .exe
в администраторе) отключить защитник Windows.
Чтобы избежать исключения UAC, я также добавил skip_permission_denied
опцию «Файловая система».
Однако моя программа все еще сталкивается "Sharing Violation error"