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

时间:2011-04-17 06:42:12

标签: c++ sql c windows

我的功能如下:

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不起作用

5 个答案:

答案 0 :(得分:1)

FindFirstFileFindFirstFileEx怎么样?

  

在目录中搜索文件或   名称匹配的子目录   特定名称(或部分名称,如果   使用通配符。)

  

如果功能失败或失败   从中搜索字符串中的文件   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提供了一组路径函数,可用于规范化路径或验证路径似乎是有效的。