检查外部设备上的文件时文件是否存在

时间:2012-11-11 22:41:28

标签: objective-c cocoa nsfilemanager

播放列表文件.m3u包含外部设备上可用的条目(本例中为USB密钥),例如:

/Volumes/KINGSTON/folder/mytitle.mp3

我想检查文件是否存在:

NSURL *url = [NSURL URLWithString:@"/Volumes/KINGSTON/folder/mytitle.mp3"];
NSFileManager *manager = [NSFileManager defaultManager];
NSLog(@"%d",[manager fileExistsAtPath:[url absoluteString]]); //returns 0. I expect 1

我也尝试过:

NSURL *u = [[NSURL alloc]initWithScheme:@"/Volumes" host:@"/KINGSTON" path:@"/folder/mytitle.mp3"];
NSLog(@"%d",[manager fileExistsAtPath:[u absoluteString]]); //0

我做错了什么?

谢谢,

罗兰

2 个答案:

答案 0 :(得分:4)

NSURL *url = [NSURL URLWithString:@"/Volumes/KINGSTON/folder/mytitle.mp3"];

该字符串不描述URL。它是一个路径名。使用fileURLWithPath:

NSLog(@"%d",[manager fileExistsAtPath:[url absoluteString]]);

absoluteString没有返回路径;它返回一个描述URL的字符串。使用path

或者,更好的是,use checkResourceIsReachableAndReturnError:

  

我也尝试过:

NSURL *u = [[NSURL alloc]initWithScheme:@"/Volumes" host:@"/KINGSTON" path:@"/folder/mytitle.mp3"];

/ Volumes不是一个方案,/ KINGSTON不是主机,而/ folder / mytitle.mp3是一个路径但不引用任何存在的东西。

文件URL的方案是file:,主机通常是localhost或空字符串。文件URL的路径是文件的完整绝对路径。

答案 1 :(得分:1)

在第一个示例中,您需要使用+[NSURL fileURLWithPath:]。在你的第二个例子中,我看到你正在尝试做什么,但你只是以错误的方式去做。

我认为,如果您有可以直接转到NSURL的路径,那么您有-fileExistsAtPath:打扰的原因?