在Windows上以C语言获取文件属性的适当方法是什么?

时间:2015-05-05 12:42:16

标签: c windows

我想在跨平台的C中获取文件属性。我尝试了stataccess,它们在类Unix系统(Ubuntu,Mac OS X)上都能正常工作。但是这个命令在Windows上行为不端,例如:是否有文件的读取权限,stataccess都会返回true。

这是我的函数,它可以在类Unix系统上正常工作。

int is_readable(char *file)
{
    struct stat fileStat;
    stat(file, &fileStat);
    return (fileStat.st_mode & S_IRUSR);
}

在Windows上使用C语言获取文件属性的正确方法是什么(跨平台解决方案会更好)?

2 个答案:

答案 0 :(得分:2)

unix系统和Windows上的文件权限完全不同。 所以我认为,最简单的只是尝试读取文件并处理错误/返回代码。

答案 1 :(得分:1)

在Win32上,access()确实可行。我怀疑你用错了,成功时返回0。 The documentation很清楚:

  

如果文件具有给定模式,则每个函数返回0。如果指定的文件不存在或者没有给定的模式,则该函数返回-1; [...]

-1错误地解释为true很容易;您必须与0进行比较。

另外,我认为你的函数不能正常工作,它不处理stat()失败时的情况。 I / O很脆弱,你必须进行错误检查!