您现在的位置是:首页 >其他 >C++ 判断路径为文件夹还是文件网站首页其他

C++ 判断路径为文件夹还是文件

哭哭啼 2023-04-28 22:30:03
简介C++ 判断路径为文件夹还是文件

stat函数

头文件


#include <sys/stat.h>

 
struct stat s;
char* path = "D:\test.txt";
 
if (stat(path,&s)==0){
  if(s.st_mode & S_IFDIR){
    std::cout<<"it's a directory"<<std::endl;
  }else if (s.st_mode & S_IFREG){
    std::cout<<"it's a file"<<std::endl;
  }else{
    std::cout<<"not file not directory"<<std::endl;
  }
}else{
  std::cout<<"error, doesn't exist"<<std::endl;
}

语法

int stat (Path, Buffer)
const char *Path;
struct stat *Buffer;

Path 

指定标识文件的路径名。根据所使用的接口,此名称的解释不同。如果指定了DirFileDescriptor并且Path是一个相对路径名,那么Path被认为是相对于DirFileDescriptor指定的目录的。

Buffer

指定指向在其中返回信息的状态结构的指针。stat结构在<sys/stat.h>文件中描述。

返回值

成功完成后,返回值0。否则,返回-1的值,并设置errno全局变量来指示错误。

Error Codes

EACCES路径前缀的一个组件的搜索权限被拒绝
ENAMETOOLONGPOSIX_NO_TRUNC标志生效时,路径前缀的长度超过了PATH_MAX标志值或路径名超过了NAME_MAX标志值。
ENOTDIR路径前缀的组件不是目录。
EFAULTPath或Buffer参数都指向进程分配的地址空间之外的位置
ENOENT以Path参数命名的文件不存在
EOVERFLOW文件大小大于Buffer参数所指向的状态结构中所能表示的最大值。

FindFirstFileA函数

头文件

#include <windows.h>
using namespace std;

WIN32_FIND_DATAA FindFileData;
FindFirstFileA("D:\test.txt",&FindFileData);
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
    std::cout<<"directory"<<std::endl;
}
else
{
    std::cout<<" file "<<std::endl;
}

语法

HANDLE FindFirstFileA(
  [in]  LPCSTR             lpFileName,
  [out] LPWIN32_FIND_DATAA lpFindFileData
);

参数

[in] lpFileName

目录或路径以及文件名。 文件名可以包含通配符,例如星号 (*) 或问号 (?) 。

此参数不应为 NULL,例如,空字符串或缺少终止 null 字符) 的字符串,或尾随反斜杠 () 结尾的字符串 (。

如果字符串以通配符、句点 (.) 或目录名称结尾,则用户必须具有对路径上根目录和所有子目录的访问权限。

在此函数的 ANSI 版本中,名称限制为 MAX_PATH 个字符。 若要将此限制扩展到 32,767 宽字符,请调用函数的 Unicode 版本,并将“\?”前面附加到路径。 有关详细信息,请参阅 命名文件

提示从 Windows 10 版本 1607 开始,对于此函数的 unicode 版本 (FindFirstFileW) ,可以选择加入以删除MAX_PATH字符限制,而无需附加“\?”。 有关详细信息,请参阅 命名文件、路径和命名空间 的“最大路径限制”部分。

[out] lpFindFileData

指向 WIN32_FIND_DATA结构的指针 ,该结构接收有关找到的文件或目录的信息。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。