例如,我想在 %APPDATA% 目录中找到一个名为“DATABASE”的特定文件夹。
我试过:
#include <iostream>
#include <windows.h>
using namespace std;
int main(){
string path = getenv("appdata");
path += "\\*";
WIN32_FIND_DATA file;
HANDLE search_handle = FindFirstFile(path.c_str(), &file);
if (search_handle){
do{
cout << file.cFileName << endl; // Prints all the files/folders in %appdata%
}while (FindNextFile(search_handle, &file));
}
// Real Problem Below. . .
if(file.cFileName == "DATABASE"){ // Doesn't work
cout << "Folder Found! << endl;
}else{
cout << "Error: Folder not found. << endl;
}
getchar();
return 0;
}
它没有按照我的意愿执行,是否有其他方法可以做到这一点?
最佳答案
这不是 Java 或 C#。与指针相比,数组的 == 运算符不是这样工作的。
如果您查看 cFileName 成员的定义,它是这样的:
TCHAR cFileName[MAX_PATH];
根据您是为 Unicode 还是 MBCS 构建,TCHAR 是 WCHAR 或 char。
如果您真的想进行比较,请使用 _tcsicmp()。我说使用 _tcsicmp() 而不是 _tcscmp() 因为在 Windows 中,文件名不区分大小写。您的问题代码行可以这样解决:
if(0 ==_tcsicmp(file.cFileName, _T("DATABASE"))){ // works now
_tcsicmp() 是 stricmp() 的 TCHAR 等价物。一般来说,如果您在 Visual C++ 中创建一个新项目,它通常会启用 Unicode 字符串。
关于c++ - 如何运行 if 语句以使用 file.cFileName 查找特定文件或文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392688/