当前位置: 技术问答>linux和unix
linux文件是否存在问题
来源: 互联网 发布时间:2016-10-06
本文导语: 哪位神人能帮我写个程序啊? 程序的功能大体描述如下: 随便给一个path,譬如/a/b/c/123.txt, 我首先要检测父目录/a/b/是否已经存在, 如果存在的话,直接返回成功0, 如果父目录/a/b/不存在的话,需要...
哪位神人能帮我写个程序啊? 程序的功能大体描述如下:
随便给一个path,譬如/a/b/c/123.txt, 我首先要检测父目录/a/b/是否已经存在, 如果存在的话,直接返回成功0, 如果父目录/a/b/不存在的话,需要递归的创建/a/, /a/b/,/a/b/c/. 如果创建文件夹出错就返回-1, 比如,要创建/a/时,但是当前目录下面已经存在名称为a的文件, 这时创建肯定会出错,直接返回-1. 请问该怎么写啊?
随便给一个path,譬如/a/b/c/123.txt, 我首先要检测父目录/a/b/是否已经存在, 如果存在的话,直接返回成功0, 如果父目录/a/b/不存在的话,需要递归的创建/a/, /a/b/,/a/b/c/. 如果创建文件夹出错就返回-1, 比如,要创建/a/时,但是当前目录下面已经存在名称为a的文件, 这时创建肯定会出错,直接返回-1. 请问该怎么写啊?
|
我不会编程 用access()函数或者stat()函数应该是可以的
int access(const char *path, int amode);
If the requested access is permitted, access() succeeds and shall return 0; otherwise, -1 shall be returned and errno shall be set to indicate the error.
检测文件是否存在:access(filename, 0)
如果返回0,表示文件存在,否则不存在。
int stat(const char *path, struct stat *buf)
文件对应的属性
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};
int access(const char *path, int amode);
If the requested access is permitted, access() succeeds and shall return 0; otherwise, -1 shall be returned and errno shall be set to indicate the error.
检测文件是否存在:access(filename, 0)
如果返回0,表示文件存在,否则不存在。
int stat(const char *path, struct stat *buf)
文件对应的属性
struct stat {
mode_t st_mode; //文件对应的模式,文件,目录等
ino_t st_ino; //inode节点号
dev_t st_dev; //设备号码
dev_t st_rdev; //特殊设备号码
nlink_t st_nlink; //文件的连接数
uid_t st_uid; //文件所有者
gid_t st_gid; //文件所有者对应的组
off_t st_size; //普通文件,对应的文件字节数
time_t st_atime; //文件最后被访问的时间
time_t st_mtime; //文件内容最后被修改的时间
time_t st_ctime; //文件状态改变时间
blksize_t st_blksize; //文件内容对应的块大小
blkcnt_t st_blocks; //伟建内容对应的块数量
};