2013-07-15 29 views
0

我不明白這種方法是如何工作的。下面是代碼有沒有什麼im不足以說明fileExistsAtPath:isDirectory方法?

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

,這裏是結果,如果:

1)三K黨是一個文件

returnVal = NO 
isDir  = NO 

2)三K黨是一個空目錄

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」的文件夾。它適用於該文件夾,但不適用於該文件。有趣的是,如果文件的擴展名,它的工作原理。那麼,沒有擴展名的文件有什麼問題嗎? (你們這些人仍無法與沒有extention重現嗎?)

2)編輯

謝謝你幫我解決了這個傢伙。我已將我的Mac設置爲顯示文件的擴展名。但是,Mac似乎是一種奇怪的行爲。我選擇文件「kk.plist」,然後將該文件重命名爲「kk」,如圖中所示。只要我這樣做,Mac OSx就會自動選擇隱藏擴展選項。所以當我認爲文件是「kk」時,它仍然是「kk.plist」,其擴展名隱藏。正如你所看到的,這兩個文件具有相同的擴展名,一個隱藏,另一個不是。我沒有意識到隱藏的擴展只能應用於一個文件。謝謝。

enter image description here

+1

我無法使用相似的路徑名重現此問題。我每次都會得到預期的結果。 – dreamlax

+0

我無法複製。你的路上可能有一個錯字。 – Kevin

+0

我猜在第一種情況下,「kkk」不存在於您要查找的位置。 –

回答

0

1)三K黨是一個文件

returnVal = NO 
isDir  = NO 

所以對於場景#1不應該的結果是以下?

returnVal = YES 
isDir  = NO 

是。但是當你試圖驗證這種方法的結果時,要小心Finder隱藏的東西。

正如您發現的,一個示例是隱藏擴展名:您給出了一個沒有擴展名的路徑,並且在沒有找到您認爲沒有擴展名的文件時感到驚訝;事實上,它還有一個擴展名,Finder隱藏了它,所以它仍然與路徑不匹配,所以你得到的結果是正確的。

另一個例子被隱藏(a.k.a.看不見的)物品。對於在Finder中找不到的文件,您可能會得到YES結果。 Go命令將暫時顯示一個不可見的目錄,但不會幫助您查看文件。

每當fileExists:isDirectory:的結果會讓你大吃一驚,和Finder似乎表明結果是錯誤的,儘量ls的路徑在終端:

ls -dl /path/to/item 

如果命令顯示項目的說明,那麼它存在。如果它打印一個錯誤,那麼它不會。您還可以從輸出中瞭解該項目是否是目錄。

相關問題