2 starwar2012 starwar2012 于 2013.01.30 10:30 提问

在iphone中打开文件系统报出不可读

在iphone应用中打开文件,NSFileManager isReadableFileAtPath 返回 NO
代码:

-(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个回答

g989_1314125
g989_1314125   2013.01.30 13:45
已采纳

这是由于URL不是一个路径

[url absoluteString]

比如:

file:///var/mobile/XXXXXXXX/MyApp.app/Documents/foo.txt

你需要使用:

[url path]

还有,两个注释:

url != nil && [url isFileURL]

非常多余

[url isFileURL]

如果URL是nil,就会返回NO

[documentsPath stringByAppendingString:@"/timecode.xml"]

不要重新发明,试试拆分路径分隔符,这行应该是这样的:

[documentsPath stringByAppendingPathComponent:@"timecode.xml"]
flyingcut
flyingcut 很容易被忽略的一个问题,碰到两回了=。=!
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!