【问题标题】:Checking if file exists when file on an external device当文件在外部设备上时检查文件是否存在
【发布时间】:2012-10-31 10:28:03
【问题描述】:

播放列表文件 .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

我做错了什么?

谢谢,

罗兰

【问题讨论】:

    标签: objective-c cocoa nsfilemanager


    【解决方案1】:
    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 的路径是文件的完整绝对路径。

    【讨论】:

      【解决方案2】:

      在您的第一个示例中,您需要使用+[NSURL fileURLWithPath:]。在您的第二个示例中,我看到了您想要做的事情,但您只是走错了路。

      我认为当您拥有可以直接传递给-fileExistsAtPath: 的路径时,您对NSURL 感到困扰是有原因的?

      【讨论】:

      • NSURL 是 Apple 在其文档中推荐的内容。没有其他动机
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2020-02-27
      • 2011-02-24
      • 1970-01-01
      • 2023-04-04
      • 2021-12-25
      相关资源
      最近更新 更多