什么是最便宜的方法来知道一个path是指一个文件夹或在c + +文件?

我正在使用shell扩展覆盖处理程序,我将传递一个我知道有效的path,但是我不知道它是一个文件夹还是一个文件。 这个操作可能会经常被调用,所以我想确定它是否是一个文件或文件夹尽可能便宜。 使用c + +(窗口具体是我的要求罚款),我怎么能最好地完成这个?

我建议使用Boost的Filesystem库中的 is_directory

 is_directory( "foo" ) 

GetFileAttributes()将提供这些信息:

 const DWORD result = GetFileAttributes("C:\\path\\x"); if (INVALID_FILE_ATTRIBUTES == result) { std::cerr << "Error: " << GetLastError() << "\n"; } else if (FILE_ATTRIBUTE_DIRECTORY == (result & FILE_ATTRIBUTE_DIRECTORY)) { std::cout << "Is directory\n"; } else { std::cout << "Is file\n"; } 

使用其中一个stat变量,并测试st_mode位。

这里有stat()函数族,它返回一个文件/目录的元数据,包括它的类型: http : //msdn.microsoft.com/en-us/library/14h5k7ff.aspx

如果你使用Windows类,那么只需使用这个

 Directory::Exists(path) 

如果是,那么你有一个文件夹。 同样使用

 File::Exists(path) 

如果你想确定一个路径是否是一个文件。

还有PathIsDirectory的(Shell API) PathIsDirectory