2010-08-22 70 views
1

我试图做一个简单的程序,处理文件和目录,但我有两个主要问题:如何找出文件或目录是否存在?

  • 我怎么能检查文件或目录是否存在,以及
  • 我怎么知道如果它是一个文件,目录,符号链接,设备,命名管道等?目前主要是文件和目录,但我也想知道其他人。

编辑:过所有那些谁是建议使用stat()或类似的功能,我已经看过成,虽然它可能会回答我的第一个问题,我想不出它会如何回答第二...

+0

你在运行什么操作系统? – Starkey 2010-08-22 20:29:44

+0

@Starkey Linux。 – Frxstrem 2010-08-22 20:31:09

回答

6

既然你询问命名管道/符号链接等等,你可能在* nix,所以使用 lstat()功能

struct stat info; 

if(lstat(name,&info) != 0) { 
    if(errno == ENOENT) { 
    // doesn't exist 
    } else if(errno == EACCES) { 
    // we don't have permission to know if 
    // the path/file exists.. impossible to tell 
    } else { 
     //general error handling 
    } 
    return; 
} 
//so, it exists. 

if(S_ISDIR(info.st_mode)) { 
    //it's a directory 
} else if(S_ISFIFO(info.st_mode)) { 
    //it's a named pipe 
} else if(....) { 
} 

Se文档here为您可以使用的S_ISXXX宏。

+0

谢谢,这正是我所寻找的:D – Frxstrem 2010-08-22 20:42:14

2

stat()函数应该给你你正在寻找的一切(或更具体地lstat()因为stat()将遵循链接)。

1

使用stat(或者,如果你希望获得关于符号链接的信息,而不是跟随它和获取有关目标的信息,lstat

NAME

统计 - 获取文件状态

概要

#include <sys/stat.h> 

int stat(const char *restrict path, struct stat *restrict buf); 

说明

stat()函数将获取有关指定文件的信息并将其写入buf参数指向的区域。 path参数指向命名文件的路径名。不需要读取,写入或执行指定文件的权限。提供额外或替代文件访问控制机制的实现可能会在实现定义的条件下导致stat()失败。特别是,系统可能会拒绝路径指定的文件的存在。

如果命名文件是符号链接,则stat()函数将继续使用符号链接的内容路径名解析,并应退回有关生成的文件,如果文件存在的信息。

buf参数是一个指向stat结构的指针,正如在头文件中定义的那样,其中放置了关于该文件的信息。

相关问题