0

我不明白这种方法是如何工作的。这是代码

BOOL isDir = NULL;
BOOL returnVal;
path = @"/Users/me/Desktop/kkk";
returnVal = [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir];

以下是以下结果:

1) kkk 是一个文件

returnVal = NO
isDir     = NO

2) kkk 是一个空目录

returnVal = YES
isDir     = YES

场景 #2 似乎按预期工作,但根据文档:

path
The path of a file or directory. If path begins with a tilde (~), it must first be expanded with stringByExpandingTildeInPath, or this method will return NO. 

isDirectory
Upon return, contains YES if path is a directory or if the final path element is a symbolic link that points to a directory, otherwise contains NO. If path doesn’t exist, this value is undefined upon return. Pass NULL if you do not need this information.

那么对于场景#1,结果不应该如下吗?

returnVal = YES
isDir     = NO

1)编辑 以下评论。

但文件确实存在。我手动创建文件来测试它。哈哈。它只是一个有 4 行代码的程序。我在桌面上有两个文件/文件夹。首先,我在那里放了一个名为“kkk”的文件(没有扩展名),然后我删除了该文件并在那里放置了一个名为“kkk”的文件夹。它适用于文件夹,但不适用于文件。有趣的是,如果文件扩展名,它就可以工作。那么没有扩展名的文件有问题吗?(你们仍然无法在没有扩展的情况下复制它吗?)

2) 编辑

谢谢你们帮我解决这个问题。我的 Mac 设置为显示文件的扩展名。但似乎 Mac 是一种奇怪的行为。我选择文件“kk.plist”,然后将文件重命名为“kk”,如图所示。一旦我这样做,Mac OSx 会自动选择隐藏扩展选项。所以当我认为文件是“kk”时,它仍然是隐藏扩展名的“kk.plist”。如您所见,两个文件具有相同的扩展名,一个是隐藏的,另一个不是。我没有意识到隐藏的扩展名只能应用于一个文件。谢谢。

在此处输入图像描述

4

1 回答 1

0

1) kkk 是一个文件

returnVal = NO
isDir     = NO

⋮</p>

那么对于场景#1,结果不应该如下吗?

returnVal = YES
isDir     = NO

是的。但是,当您尝试验证此方法的结果时,请注意 Finder 对您隐藏的东西。

如您所见,一个示例是隐藏扩展名:您提供了一个没有扩展名的路径,但当它没有找到您认为没有扩展名的文件时,您会感到惊讶;实际上,它仍然有一个扩展名,Finder隐藏了它,所以它仍然与路径不匹配,所以你得到的结果是正确的。

另一个例子是隐藏的(也就是不可见的)项目。对于在 Finder 中找不到的文件,您可能会得到“是”的结果。Go 命令将暂时显示一个不可见的目录,但不会帮助您获取文件。

每当fileExists:isDirectory:的结果让您感到惊讶,并且 Finder 似乎显示结果错误时,请尝试ls终端中的路径:

ls -dl /path/to/item

如果该命令打印项目的描述,则它存在。如果它打印错误,那么它不会。您还可以从输出中判断该项目是否为目录。

于 2013-07-15T16:35:42.083 回答