我正在使用C,有时我必须处理类似的路径
C:\无论
C:\无论\
C:\无论\ Somefile
有没有办法检查给定路径是目录还是给定路径是文件?
stat()会告诉你这个.
struct stat s; if( stat(path,&s) == 0 ) { if( s.st_mode & S_IFDIR ) { //it's a directory } else if( s.st_mode & S_IFREG ) { //it's a file } else { //something else } } else { //error }
调用GetFileAttributes,并检查FILE_ATTRIBUTE_DIRECTORY属性.
在Win32中,我通常使用PathIsDirectory及其姐妹函数.这适用于Windows 98,GetFileAttributes没有(根据MSDN文档.)
随着C++ 14/C++ 17可以使用独立于平台is_directory()
,并is_regular_file()
从文件系统库.
#include// C++17 #include namespace fs = std::filesystem; int main() { const std::string pathString = "/my/path"; const fs::path path(pathString); // Constructing the path from a string is possible. std::error_code ec; // For using the non-throwing overloads of functions below. if (fs::is_directory(path, ec)) { // Process a directory. } if (ec) // Optional handling of possible errors. { std::cerr << "Error in is_directory: " << ec.message(); } if (fs::is_regular_file(path, ec)) { // Process a regular file. } if (ec) // Optional handling of possible errors. Usage of the same ec object works since fs functions are calling ec.clear() if no errors occur. { std::cerr << "Error in is_regular_file: " << ec.message(); } }
在C++ 14中使用std::experimental::filesystem
.
#include// C++14 namespace fs = std::experimental::filesystem;
"文件类型"部分列出了其他实现的检查.