c++ - 如何运行 if 语句以使用 file.cFileName 查找特定文件或文件夹

标签 c++

例如,我想在 %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/

相关文章:

C++编写随机函数和参数

c++ - 为arm编译qwt

c++ - 如何使用opencv和c++从视频文件中每秒捕获图像?

c++ - 可以在 C++ 中将匿名对象声明为静态的吗?

C++:std::unordered_map 保证是基于节点的吗?

c++ - 如何在 C++ 中为 iso-8859-15 创建自定义 ctype

c++ - 如何在运行时检查 typeid 是否为指针?

c++ - 以整数数组为参数并返回数组中奇数之和的函数

c++ - 识别opencv中的小物体

c++ - 内联函数是如何编译成汇编的?