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 | 路径前缀的一个组件的搜索权限被拒绝 |
| ENAMETOOLONG | POSIX_NO_TRUNC标志生效时,路径前缀的长度超过了PATH_MAX标志值或路径名超过了NAME_MAX标志值。 |
| ENOTDIR | 路径前缀的组件不是目录。 |
| EFAULT | Path或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结构的指针 ,该结构接收有关找到的文件或目录的信息。
文章介绍了如何在Unix/Linux系统中使用stat函数和在Windows系统中使用FindFirstFileA函数来判断文件是目录还是普通文件。stat函数通过检查文件的模式来区分文件类型,而FindFirstFileA则通过查询文件属性实现这一功能。
1057

被折叠的 条评论
为什么被折叠?



