Windows文件操作【C/C++】
1 获取当前目录
char* _getcwd( char *buffer, int maxlen )
ITEM | Meaning |
---|---|
功能 | 获得当前工作目录. |
头文件 | include < direct.h> |
返回值 | 成功返回指向buffer的pointer |
失败返回NULL,且设置errno为以下三个值之一 | |
ENODEV 无该设备 | |
ENOMEM 内存不够 | |
ERANGE 结果超出范围 | |
注意 | 当第一个参数为 NULL 时, 第二个参数 maxlen 长度设置无效 |
且函数使用 malloc 分配足够内存, 需要将函数返回值传递给 free() 函数来释放内存. | |
当第一个参数不为 NULL 时,maxlen 指定长度不够函数返回错,设置errno为ERANGE |
2 更改当前工作目录
int _chdir( const char *dirname );
ITEM | Meaning |
---|---|
功能 | 更改当前工作目录. |
头文件 | include < direct.h> |
返回值 | 成功返回0 |
失败返回-1 | |
且设置errno如下:ENOENT 该路径不存在 |
3 文件遍历(查找)
long _findfirst( char *filespec, struct _finddata_t *fileinfo );
ITEM | Meaning |
---|---|
功能 | 提供与filespec指定入口泛式匹配的第一个文件。 |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < io.h > |
参数 | filespec - 目标文件规范,可以包含通配符 |
fileinfo - 文件信息buffer | |
返回值 | 成功返回唯一的搜索句柄 |
出错返回-1,且设置errno为如下值: | |
ENOENT 该泛式无法匹配 | |
EINVAL 无效文件名 |
struct _finddata_t
{
unsigned attrib;
time_t time_create;
time_t time_access;
time_t time_write;
_fsize_t size;
char name[_MAX_FNAME];
};
ITEM | Meaning |
---|---|
unsigned atrrib | 文件属性的存储位置。它存储一个unsigned单元,用于表示文件的属性。 |
文件属性是用位表示的,主要有以下一些: | |
_A_ARCH(存档) _A_HIDDEN(隐藏) _A_NORMAL(正常) | |
_A_RDONLY(只读) _A_SUBDIR(文件夹) _A_SYSTEM(系统) | |
这些都是在< io.h>中定义的宏,可以直接使用,而本身的意义其实是一个无符号整型(只不过这个整型应该是2的几次幂,从而保证只有一位为1,而其他位为0)。 | |
既然是位表示,那么当一个文件有多个属性时,它往往是通过位或的方式,来得到几个属性的综合。 | |
例如只读+隐藏+系统属性:应该为:_A_HIDDEN|_A_RDONLY|_A_SYSTEM 。 | |
time_t time_create | 这里的time_t是一个变量类型,用来存储文件创建时间。 |
time_t time_access | 文件最后一次被访问的时间。 |
time_t time_write | 文件最后一次被修改的时间。 |
_fsize_t size | 文件的大小。这里的_fsize_t应该可以相当于unsigned整型,表示文件的字节数。 |
char name[_MAX_FNAME] | 文件的文件名。这里的_MAX_FNAME是一个常量宏,它在< stdlib.h >头文件中被定义,表示的是文件名的最大长度。 |
int _findnext( long handle, struct _finddata_t *fileinfo );
ITEM | Meaning |
---|---|
功能 | 按照前面_findfirst中的泛式规则,查找下一个符合该泛式的文件,并以此为依据修改fileinfo中的值。 |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < io.h> |
参数 | long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回) |
fileinfo - 文件信息buffer | |
返回值 | 成功返回唯一的搜索句柄 |
出错返回-1,且设置errno为如下值: | |
ENOENT 没有更多的符合该泛式的文件 |
int _findclose( long handle );
ITEM | Meaning |
---|---|
功能 | 关闭搜寻句柄并释放相应资源 |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < io.h> |
参数 | long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回) |
返回值 | 成功返回唯一的搜索句柄 |
出错返回-1,且设置errno为如下值: | |
ENOENT 没有更多的符合该泛式的文件 |
4 创建目录
int _mkdir( const char *dirname );
ITEM | Meaning |
---|---|
功能 | 创建一个新目录,目录名为dirname. |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < direct.h> |
参数 | long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回) |
返回值 | 成功返回唯一的搜索句柄 |
出错返回-1,且设置errno为如下值: | |
EACCESS : 权限不允许 | |
EEXIST : 该目录已存在 | |
ENOENT : 无该文件或目录 |
5 删除目录
int _rmdir( const char *dirname );
ITEM | Meaning |
---|---|
功能 | 删除名为dirname的目录. |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < direct.h> |
参数 | long handle - 搜索句柄(通常由紧靠其前的_findfirst()返回) |
返回值 | 成功返回唯一的搜索句柄 |
出错返回-1,且设置errno为如下值: | |
EACCESS : 权限不允许 | |
ENOTEMPTY : dirname不是文件夹;或者该文件夹不空;或者dirname为当前工作文件夹;或者dirname为当根文件夹; | |
ENOENT : 无该文件或目录 |
6 获取文件权限
int _access( const char *path, int mode );
ITEM | Meaning |
---|---|
功能 | 测定文件/目录存取权限. |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < io.h> |
参数 | path - 文件或者目录 |
mode - 权限设定,其值如下:00 Existence only;02 Write permission;04 Read permission;06 Read and write permission |
7 更改当前工作驱动器
int _chdrive( int drive );
ITEM | Meaning |
---|---|
功能 | 更改当前工作驱动器. |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < direct.h> |
参数 | drive =1 : A盘 |
drive =2 : B盘 | |
drive =3 : C盘 | |
…… | |
返回值 | 成功返回0 |
失败返回-1 |
8 获取指定驱动器的当前工作路径
char* _getdcwd( int drive, char *buffer, int maxlen );
ITEM | Meaning |
---|---|
功能 | 获得指定驱动器的当前工作路径. |
通常后继用_findnext函数后续使用来完成某泛式下的文件遍历。 | |
头文件 | include < direct.h> |
参数 | 当第一个参数为 NULL 时,该函数设置errno为ERANGE |
返回值 | 成功返回指向buffer的pointer |
失败返回NULL,且设置errno为以下三个值之一: | |
ENODEV 无该设备 | |
ENOMEM 内存不够 | |
ERANGE 结果超出范围 |
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C++文件读写
- 下一篇: 结合MongoDB开发LBS应用