播放列表文件.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
我做错了什么?
谢谢,
罗兰
答案 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:
打扰的原因?