我想使用一个打开的面板让用户选择一个目的地,但我想在那一点提醒他们该目录是不可写的。我通常更喜欢创建它并处理错误,但这对我来说没用,因为我还不想创建文件夹。 (如果有的话,我肯定会在创建错误时处理错误。)
我认为可能有一种比创建它并删除它更好的方法,这会很臭。
我试过这样做,认为“文件”可能意味着文件或目录就像其他方法一样。
NSFileManager *fm = [NSFileManager defaultManager];
[fm isWritableFileAtPath:destinationString]
(我不确定我是否想提供身份验证来覆盖权限,但随时告诉我如何。)
答案 0 :(得分:5)
编辑看起来像喷墨打算弄清楚为什么我得到的结果不一致。将他标记为正确的答案。
怪异。之前我尝试过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?
答案 1 :(得分:3)
你想要
-attributesOfItemAtPath:error:.
-jcr
答案 2 :(得分:3)
目录的路径以“/”结尾。假设您的代码是:
NSString* destinationString = [[panel URL] path];
[fm isWritableFileAtPath:destinationString];
你最终会得到一个不以“/”结尾的destinationString,因此isWritableFileAtPath:
将测试写入名为“someDir”的文件的可能性,而不是文件夹“someDir”。
快速解决方法是:
NSString* destinationString = [[panel URL] path];
if (![destinationString hasSuffix:@"/"])
destinationString = [destinationString stringByAppendingString:@"/"];
[fm isWritableFileAtPath:destinationString];
答案 3 :(得分:1)
是的,目录计为文件。