在 iPhone 应用程序中打开文件 - NSFileManager isReadableFileAtPath 返回 NO
Posted
技术标签:
【中文标题】在 iPhone 应用程序中打开文件 - NSFileManager isReadableFileAtPath 返回 NO【英文标题】:Opening file in iPhone application - NSFileManager isReadableFileAtPath returning NO 【发布时间】:2013-01-29 15:50:13 【问题描述】:这是我的代码:
-(BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
if (url != nil && [url isFileURL])
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
if ( [[NSFileManager defaultManager] isReadableFileAtPath:[url absoluteString]] )
NSLog(@"READABLE!");
[[NSFileManager defaultManager] copyItemAtPath:[url absoluteString] toPath:[documentsPath stringByAppendingString:@"/timecode.xml"] error:nil];
else
NSLog(@"NOT READABLE!");
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[documentsPath stringByAppendingString:@"/timecode.xml"]];
if (fileExists)
NSLog(@"THERE!");
else
NSLog(@"NOT THERE!");
由于某种原因,当我从邮件应用程序(或任何其他应用程序,包括良好的阅读器)打开一个文件到我的应用程序时,它说它不可读。显然,该文件不存在。
任何想法为什么会发生这种情况?
【问题讨论】:
【参考方案1】:因为 URL 不是路径。
[url absoluteString]
看起来像
file:///var/mobile/XXXXXXXX/MyApp.app/Documents/foo.txt
你需要使用
[url path]
改为。
还有两个cmets:
url != nil && [url isFileURL]
是非常多余的。
[url isFileURL]
如果 URL 是 nil
,无论如何都会返回 NO
(因为消息传递 nil
总是返回零)。
两个:
[documentsPath stringByAppendingString:@"/timecode.xml"]
不要重新发明***/尝试猜测路径分隔符。这行应该是
[documentsPath stringByAppendingPathComponent:@"timecode.xml"]
【讨论】:
@objectiveccoder001 欢迎您。经验教训:在尝试进行任何编程之前,请先了解一般情况。以上是关于在 iPhone 应用程序中打开文件 - NSFileManager isReadableFileAtPath 返回 NO的主要内容,如果未能解决你的问题,请参考以下文章
如何使用我的 iOS 应用程序在我的 iPad/iPhone 中打开 PDF 文件?
在 iPhone 应用程序中打开文件 - NSFileManager isReadableFileAtPath 返回 NO
从其他应用程序打开 URL 仅适用于 iPad,在 iPhone 上禁用