文件存在路径:(NSFileManager)
Posted
技术标签:
【中文标题】文件存在路径:(NSFileManager)【英文标题】:fileExistsAtPath: (NSFileManager) 【发布时间】:2010-07-29 22:51:27 【问题描述】:此方法是否应该将路径作为其参数?
看起来它需要一个文件名作为路径:
例如,/home/file.txt 是一个文件,而 /home/ 是一个路径。这个方法看起来像是将前者作为参数。
【问题讨论】:
按照惯例,方法参数的名称通过将输入放在最后来告诉您它的期望。在本例中,它是 file_at_Path,因此它需要一个路径。相比之下,像 path_for_fileName 这样的东西会期望一个包含文件名的字符串并返回一个路径。 为什么投反对票?代码示例显示正在传递一个文件名。 不是这里的反对者,但这可能是由于主题和第一句话的组合。您应该注意提出更完整的问题,主题更精确,等等。 @Joshua Nozzi:怎么可能比“fileExistsAtPath: 以路径作为参数吗?”更精确?在我看来,它被否决了,因为提问者对什么是错误的理解路径是。我认为这不是投反对票的正当理由。 你在和错误的人争论。我说我不是投反对票的人,而是在猜测。问题的主题含糊不清,文档回答了第一句话。 【参考方案1】:“路径”与“文件”的区别在 Unix 中并不常见。路径的最后一个元素是否是文件并不影响它是路径的事实。 “/home/file.txt” 看起来像一个绝对文件路径(尽管它实际上可能是一个具有欺骗性命名的目录)。 “/home/”是绝对目录路径。两者都是路径。 (“foo/bar”也是如此——在您的术语中,您会称其为“文件”还是“路径”?如果不检查该路径上的对象,我们无法知道它是命名目录还是文件。)Apple是在正常意义上使用该术语。
【讨论】:
【参考方案2】:是的,它需要一个作为路径的字符串 - 请参阅 documentation:
参数路径 文件或目录的路径。如果路径以波浪号 (
~
) 开头,则必须先用stringByExpandingTildeInPath
展开,否则此方法返回NO
。
注意/home/file.txt
是一个路径,就像/home/
。然而前者不是目录,而后者是。
【讨论】:
看起来它需要一个文件名而不是路径 你为什么会这样认为?该参数甚至被命名为path
。
参数名为路径,但我正在查看的代码是传递文件名。
我以为是文件所在目录的路径。
不,路径可以识别文件和目录,参见例如Wikipedia:“路径,文件名或目录名的一般形式,指定文件系统中的唯一位置。”【参考方案3】:
如果您想查找文件和文件夹之间的区别,请参阅-fileExistsAtPath:isDirectory:。
用法:
BOOL isDirectory;
if ([self fileExistsAtPath:@"/Users/me/Subfolder" isDirectory:&isDirectory] && isDirectory)
// Exists and is a directory. Isn't that neat?
【讨论】:
以上是关于文件存在路径:(NSFileManager)的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSFileManager 访问 mac 共享上的文件
NSFileManager.contentsOfDirectoryAtURL 返回的文件根据 NSFileManager.fileExistsAtPath 不存在?