如何确定路径是否指定了实际的文件

How do I find out if a path specifies an actual file?

本文关键字:文件 何确定 路径 是否      更新时间:2023-10-16

我有一个函数如下:

DWORD stats = GetFileAttributesA(path);
return (stats != INVALID_FILE_ATTRIBUTES) && !(stats & FILE_ATTRIBUTE_DIRECTORY) ? 1 : 0;

问题是SQL连接字符串:"Driver={SQL Server Native Client 10.0}; Server =localhost;database=NorthWindDB;Trusted_Connection=yes;"在某种程度上是有效的。它返回FILE_ATTRIBUTE_ARCHIVE值32(给出输入时stats为32)。我无法将其过滤掉,因为其他合法文件也返回该值。

如何确定该值是指定文件还是连接字符串?

更新:PathFileExists不工作

由于所有其他方法似乎都失败了,这里有一个完全不同的方法:尝试system("dir "path_to_check"")并检查其返回值(在我的机器上工作:)参见system()。

FindFirstFile或FindFirstFileEx如何?

在目录中搜索文件或名称匹配的子目录特定的名称(或部分名称)

功能失败或失败从中的搜索字符串中定位文件lpFileName参数,返回值为INVALID_HANDLE_VALUE。

我认为它可以用来判断一个给定的字符串是否代表一个真正的文件。

与如何验证文件或文件夹路径有很多相似之处?,他们也提到BOOST文件系统,但我没有经验…

代码:

#include <windows.h>
#include <iostream>
using namespace std;
int main() {
    DWORD stats = GetFileAttributesA( "Driver={SQL Server Native Client 10.0};server=localhost;database=NorthWindDB;Trusted_Connection=yes;" );
    cout << stats << endl;
}

打印4294967295—INVALID_FILE_ATTRIBUTES。它在您的系统上做什么?

也许像GetFullPathName这样的函数可以帮助您区分文件和连接字符串?(未测试)

SHLWAPI还提供了一组路径函数,可用于规范化路径或验证路径是否有效。