如何判断目录在Objective-C中是否可写?
我想使用一个打开的面板让用户选择一个目的地,但我想在此时提醒他们目录不可写。我通常更喜欢创建它并处理错误,但这对我来说并不有用,因为我现在还不想创建文件夹。(如果有错误,我一定会在创建错误时处理它。) 我认为可能有一个更好的方法,而不是仅仅创建它并删除它,这会很糟糕 我试着这样做,认为“file”可能意味着像其他方法一样的文件或目录如何判断目录在Objective-C中是否可写?,objective-c,cocoa,macos,file-io,Objective C,Cocoa,Macos,File Io,我想使用一个打开的面板让用户选择一个目的地,但我想在此时提醒他们目录不可写。我通常更喜欢创建它并处理错误,但这对我来说并不有用,因为我现在还不想创建文件夹。(如果有错误,我一定会在创建错误时处理它。) 我认为可能有一个更好的方法,而不是仅仅创建它并删除它,这会很糟糕 我试着这样做,认为“file”可能意味着像其他方法一样的文件或目录 NSFileManager *fm = [NSFileManager defaultManager]; [fm isWritableFileAtPath:desti
NSFileManager *fm = [NSFileManager defaultManager];
[fm isWritableFileAtPath:destinationString]
(我还不确定是否要提供身份验证以覆盖权限的机会,但请随时告诉我如何操作。)您想要吗
-attributesOfItemAtPath:error:.
-jcr是的,目录计为文件。编辑:看起来喷墨打印解决了我得到不一致结果的原因。把他的答案标记为正确答案
奇怪。我以前尝试过isWriteableAtPath,但它似乎并没有像我预期的那样工作,但现在有了一个单独的测试
NSFileManager *fm = [NSFileManager defaultManager];
NSLog(@"%d /private/ writeable?", [fm isWritableFileAtPath:@"/private/"]);
NSLog(@"%d /Applications/ writeable?", [fm isWritableFileAtPath:@"/Applications/"]);
NSLog(@"%d /Users/MYUSERNAME/ writeable?", [fm isWritableFileAtPath:@"/Users/MYUSERNAME/"]);
印刷品
0 /private/ writeable?
1 /Applications/ writeable?
1 /Users/MYUSERNAME/ writeable?
目录的路径以“/”结尾。假设您的代码是:
NSString* destinationString = [[panel URL] path];
[fm isWritableFileAtPath:destinationString];
您将得到一个destinationString,它不以“/”结尾,因此,iswriteablefileatpath:
将测试是否可以写入名为“someDir”的文件而不是文件夹“someDir”
一个快速解决方法是:
NSString* destinationString = [[panel URL] path];
if (![destinationString hasSuffix:@"/"])
destinationString = [destinationString stringByAppendingString:@"/"];
[fm isWritableFileAtPath:destinationString];
我认为面板甚至不允许您选择不可访问的目标,但现在我想了想,我不知道我是否真的测试过。它肯定可以让您选择不可写的内容。这是否意味着我必须查看filePosixPermissions、fileGroupOwnerAccountName、fileOwnerAccountName、NSUserName,然后我自己弄清楚?对于NSURL对象,您可以检查NSURLIsWritableKey资源值。那么,这是否意味着如果[fm isWriteableFileAtPath:@”/someDir/“]返回YES,我可以在该目录中创建文件?@inkjet感谢您弄清楚为什么它有时会工作。