我最近有一个应用程序在iPhone文件系统的目录上执行递归树遍历。我意识到当我的路径以/
和//
开头时,有一些目录会给我一个不同的输出。例如:
/private/var/mobile/Applications/<Unique String>/smth.txt
会给我不可读和不可写,而
//private/var/mobile/Applications/<Unique String>/smth.txt
会给我可读和可写。
单斜杠或双斜杠有什么不同吗?我已经在网上阅读过,但2之间应该没有区别。但是为什么我会得到不同的结果。我正在使用access()调用来获取文件/目录的accessiblity。
//check read access
rval = access (path, R_OK);
if (rval == 0)
printf ("%s is readable\n", path);
else
printf ("%s is not readable (access denied)\n", path);
//check write access
rval = access (path, W_OK);
if (rval == 0)
printf ("%s is writable\n", path);
else
printf ("%s is not writable\n", path);
修改
我意识到当我的路径之后有一个额外的斜杠时,它会给我不可读和不可写
/private/var/mobile/Applications/<Unique String>/smth.txt/
在路径产生影响后会做一个额外的斜杠吗?
答案 0 :(得分:0)
你意识到这不应该发生(也可能不会发生)。 access
可能由于文件权限之外的其他原因而失败,因此明智的第一步是更改代码以显示errno
中返回的错误。可能有一个简单的解释,例如,额外的斜线使你超过PATH_MAX或类似。
int rval;
//check read access
rval = access (path, R_OK);
if (rval == 0)
printf ("%s is readable\n", path);
else
{
perror("access read");
printf ("%s is not readable (access denied)\n", path);
}
//check write access
rval = access (path, W_OK);
if (rval == 0)
printf ("%s is writable\n", path);
else
{
perror("access write");
printf ("%s is not writable\n", path);
}