c – 递归文件搜索
发布时间:2020-12-16 09:24:06 所属栏目:百科 来源:网络整理
导读:我正在试图弄清楚如何解决这个问题……出于某种原因,它在某个时刻结束了……我不太擅长递归,我确信问题出在某处…… 此外,即使我检查了cFileName!=“..”,它仍然显示在最后,不知道为什么,但“.”不再显示.. void find_files( wstring wrkdir ){ wstring tem
我正在试图弄清楚如何解决这个问题……出于某种原因,它在某个时刻结束了……我不太擅长递归,我确信问题出在某处……
此外,即使我检查了cFileName!=“..”,它仍然显示在最后,不知道为什么,但“.”不再显示.. void find_files( wstring wrkdir ) { wstring temp; temp = wrkdir + L"" + L"*"; fHandle = FindFirstFile( temp.c_str(),&file_data ); if( fHandle == INVALID_HANDLE_VALUE ) { return; } else { while( FindNextFile( fHandle,&file_data ) ) { if( file_data.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && wcscmp(file_data.cFileName,L".") != 0 && wcscmp(file_data.cFileName,L"..") != 0 ) { find_files( wrkdir + L"" + file_data.cFileName ); } else if( file_data.dwFileAttributes != FILE_ATTRIBUTE_HIDDEN && file_data.dwFileAttributes != FILE_ATTRIBUTE_SYSTEM ) { results << wrkdir << "" << file_data.cFileName << endl; } } } } 更改后,程序不会枚举剩下的剩余文件.. 例如,如果有一个名为test的子文件夹,它会枚举test中的所有内容,但不会完成枚举指定的原始目录中的文件. 解决方法
从
FindFirstFile文档:
您应该只退出一次迭代而不是整个程序: if( fHandle == INVALID_HANDLE_VALUE ) { return; } 这可能会解决您的其他问题: else if( file_data.dwFileAttributes != FILE_ATTRIBUTE_HIDDEN && file_data.dwFileAttributes != FILE_ATTRIBUTE_SYSTEM && wcscmp(file_data.cFileName,L".") != 0 && wcscmp(file_data.cFileName,L"..") != 0 ) { results << wrkdir << "" << file_data.cFileName << endl; } 另请参阅@ fretje的答案.它给你的代码带来了另一个问题. 更新新:您需要将fHandle用作局部变量,而不是全局变量. 改成: HANDLE fHandle = FindFirstFile( temp.c_str(),&file_data ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |