如何用c语言实现递归搜索特定长尾词的文件?

2026-04-16 17:544阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计477个文字,预计阅读时间需要2分钟。

如何用c语言实现递归搜索特定长尾词的文件?

我正在尝试解决如何清除图床的问题。根据某种原因,它在某个时刻结束了。我不太擅长递归,但我确信问题出在某处。此外,我已经检查了cFileName!=..,它确实在最后显示,但不知道为什么。

我正在试图弄清楚如何解决这个问题……出于某种原因,它在某个时刻结束了……我不太擅长递归,我确信问题出在某处……

如何用c语言实现递归搜索特定长尾词的文件?

此外,即使我检查了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 the function fails or fails to
locate files from the search string in
the lpFileName parameter, the return
value is INVALID_HANDLE_VALUE and the
contents of lpFindFileData are
indeterminate.

您应该只退出一次迭代而不是整个程序:

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 );

本文共计477个文字,预计阅读时间需要2分钟。

如何用c语言实现递归搜索特定长尾词的文件?

我正在尝试解决如何清除图床的问题。根据某种原因,它在某个时刻结束了。我不太擅长递归,但我确信问题出在某处。此外,我已经检查了cFileName!=..,它确实在最后显示,但不知道为什么。

我正在试图弄清楚如何解决这个问题……出于某种原因,它在某个时刻结束了……我不太擅长递归,我确信问题出在某处……

如何用c语言实现递归搜索特定长尾词的文件?

此外,即使我检查了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 the function fails or fails to
locate files from the search string in
the lpFileName parameter, the return
value is INVALID_HANDLE_VALUE and the
contents of lpFindFileData are
indeterminate.

您应该只退出一次迭代而不是整个程序:

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 );