我想在跨平台的C中获取文件属性。我尝试了stat
和access
,它们在类Unix系统(Ubuntu,Mac OS X)上都能正常工作。但是这个命令在Windows上行为不端,例如:是否有文件的读取权限,stat
和access
都会返回true。
这是我的函数,它可以在类Unix系统上正常工作。
int is_readable(char *file)
{
struct stat fileStat;
stat(file, &fileStat);
return (fileStat.st_mode & S_IRUSR);
}
在Windows上使用C语言获取文件属性的正确方法是什么(跨平台解决方案会更好)?
答案 0 :(得分:2)
unix系统和Windows上的文件权限完全不同。 所以我认为,最简单的只是尝试读取文件并处理错误/返回代码。
答案 1 :(得分:1)
在Win32上,access()
确实可行。我怀疑你用错了,成功时返回0。 The documentation很清楚:
如果文件具有给定模式,则每个函数返回0。如果指定的文件不存在或者没有给定的模式,则该函数返回-1; [...]
将-1
错误地解释为true
很容易;您必须与0
进行比较。
另外,我认为你的函数不能正常工作,它不处理stat()
失败时的情况。 I / O很脆弱,你必须进行错误检查!