【问题标题】:NSFileManager - Working with spaces?NSFileManager - 使用空格?
【发布时间】:2014-11-20 00:16:37
【问题描述】:

我正在尝试使用以下方法将文件复制到临时目录:

NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtPath:pathWithSpaces 
                                        toPath:fullPath 
                                         error:&error];
if(error) {
    NSLog(@"Error!!!");
}
else {
    NSLog(@"Saved to temp directory");
}

但是当我试图复制一个路径有空格的文件时,它会抛出一个错误。

谁有这方面的经验?? 谢谢

日志如下:

2014-09-25 10:36:47.798 MyApp[25463:1128329] /Users/USER/Pictures/Screenshots/Screen%20Shot%202014-09-25%20at%2010.07.49.png
2014-09-25 10:36:47.798 MyApp[25463:1128329] Error!!!

(我选择了一个带空格的文件名)

【问题讨论】:

  • 尽量用“\”代替“”,“\”是反斜杠+空格。
  • 如果您打印错误而不是“错误!!!”会很好

标签: objective-c xcode cocoa nsfilemanager


【解决方案1】:

首先,不要检查error 除非方法返回false。这不是确定方法是否失败的准确方法。只有方法的返回值告诉你。

其次,如果你要在发生错误时记录日志,写出错误对象以了解发生了什么。

第三,-copyItemAtPath:toPath:error: 可以很好地处理带有空格的路径。它是外壳(终端中的命令行或其他),它可能将空格视为分隔符,从而搞砸了。任何不使用 shell 的东西,即任何编程 API,都不需要引用或转义的空格或类似的东西。

最后,你的“路径”看起来不像真的是一条路径。你有/Users/USER/Pictures/Screenshots/Screen%20Shot%202014-09-25%20at%2010.07.49.png。这看起来就像你切碎了一个 URL 字符串,以及百分比转义的空格。您不能简单地去掉前导的“file://”(或“file//localhost/”)来从文件 URL 中获取正确的路径。如果您在 NSURL 中有 URL,只需访问其 path 属性即可。

您需要重新考虑如何计算 pathWithSpaces,因为您肯定做错了。

【讨论】:

  • 很好地提到了具体的重要事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2014-12-13
  • 2012-03-28
相关资源
最近更新 更多