我正在使用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
。