我的功能如下:
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;”不知何故是有效的。它返回32(给出输入时stats为32),这是FILE_ATTRIBUTE_ARCHIVE值。我无法过滤掉它,因为其他合法文件也会返回该值。
如何确定值是指定文件还是连接字符串?
更新:PathFileExists不起作用
答案 0 :(得分:1)
FindFirstFile或FindFirstFileEx怎么样?
在目录中搜索文件或 名称匹配的子目录 特定名称(或部分名称,如果 使用通配符。)
和
如果功能失败或失败 从中搜索字符串中的文件 lpFileName参数,返回 值为INVALID_HANDLE_VALUE。
我认为它可以用于判断给定字符串是否代表真实文件。
答案 1 :(得分:1)
与how do i validate a file or folder path?有很多相似之处,他们也提到BOOST Filesystem,但我没有经验......
答案 2 :(得分:1)
由于所有其他方法似乎都失败了,这是一种完全不同的方法:尝试system("dir \"path_to_check\"")
并检查其返回值(适用于我的机器:)另请参阅system()。
答案 3 :(得分:1)
此代码:
#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。它在你的系统上做了什么?
答案 4 :(得分:0)
像GetFullPathName这样的函数可以帮助您区分文件和连接字符串吗? (尚未测试)
同样SHLWAPI提供了一组路径函数,可用于规范化路径或验证路径似乎是有效的。