如何在C++中检查Windows程序中是否存在一个文件?

12 浏览
0 Comments

如何在C++中检查Windows程序中是否存在一个文件?

这是一个仅适用于Windows的程序,因此便携代码不是问题。

我只需要:

bool DoesFileExist( LPWSTR lpszFilename )
{
    // ...
}

0
0 Comments

问题的出现原因:问题的提问者想知道如何在C++的Windows程序中检查文件是否存在。

解决方法:可以使用"_access"或"stat"函数来检查文件是否存在。这些函数是C运行时(CRT)的一部分。在Visual Studio中,可以静态链接到这些函数(.lib),或者动态链接(这种情况下,需要随应用程序一起提供一个DLL)。提问者认为静态链接是一个不错的选择。

0
0 Comments

问题的出现原因:在C++中,想要检查文件是否存在并不是一件简单的事情。因为我们只能检查“我拥有某种访问权限的文件的存在性”,而不是绝对的文件存在性。对于非超级用户账户来说,有可能存在一些你无法访问的文件,这样访问检查将无法揭示文件的存在。

解决方法:如果你想要检查一个你有访问权限的文件是否存在,可以使用以下方法之一:_stat、_stat64、_stati64、_wstat、_wstat64、_wstati64。

以下是代码示例:

#include 
#include 
bool fileExists(const std::string& filename) {
    struct stat buffer;
    return (stat(filename.c_str(), &buffer) == 0);
}
int main() {
    std::string filename = "example.txt";
    if (fileExists(filename)) {
        std::cout << "File exists!" << std::endl;
    } else {
        std::cout << "File does not exist." << std::endl;
    }
    return 0;
}

0
0 Comments

在Windows程序中,如何检查文件是否存在是一个常见的问题。根据资深工程师Raymond Chen的建议,如果你迷信的话,你应该使用GetFileAttributes函数来判断。

有趣的是,看起来_access()函数实际上只是GetFileAttributes()函数的一个包装器。这是因为整个C库基本上是在Windows API中实现的。

迷信和最佳实践之间唯一的区别就是你记得为什么这么做。

提到Raymond的建议真是太好了。无论他说什么,他都是一个很好的信息来源。

下面是使用C++语言在Windows程序中检查文件是否存在的代码示例:

#include 
#include 
bool fileExists(const std::string& filePath)
{
    DWORD attributes = GetFileAttributes(filePath.c_str());
    return (attributes != INVALID_FILE_ATTRIBUTES && !(attributes & FILE_ATTRIBUTE_DIRECTORY));
}
int main()
{
    std::string filePath = "C:\\path\\to\\file.txt";
    if (fileExists(filePath))
    {
        std::cout << "File exists." << std::endl;
    }
    else
    {
        std::cout << "File does not exist." << std::endl;
    }
    return 0;
}

以上代码定义了一个名为fileExists的函数,该函数接受一个文件路径作为参数,并使用GetFileAttributes函数来获取文件的属性。如果获取到的属性不是INVALID_FILE_ATTRIBUTES(表示文件不存在)并且不是目录文件,则返回true,表示文件存在。

在main函数中,我们可以调用fileExists函数来检查特定文件是否存在,并根据结果输出相应的信息。

通过使用GetFileAttributes函数,我们可以在C++中轻松检查文件是否存在,这是一个常用的操作。根据Raymond Chen的建议,我们可以选择相信这种方法,尽管它可能有些迷信。无论如何,这是一个简单而有效的解决方案。

0