2012-03-12 113 views
0

什麼是正確的方式來判斷一個文件是否包含在一個給定的目錄或其子目錄中?如何判斷文件是否包含在目錄中?

我想是這樣的:

if ([directoryPath contains: filePath]) { 
    // file is in directory, or in a subdirectory of directory. 
} 

例子:

ContainerPath:/Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/AppName.app

不匹配:/Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/Documents/db/Sample Data

匹配:/Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/AppName.app/Samples/1

我可以轉換前夕(包括在容器目錄中添加「/」)並檢查字符串匹配,但似乎應該有一個內置的方法。

回答

1

原則上,你的潛在願望是令人驚訝的不可能的。給定的文件路徑可能包括通過符號或硬鏈接,使「遏制」成爲一個非常複雜的問題。這些類型的鏈接在iOS中並不常見,但iOS仍然是Unix,而在Unix中,這些東西是合法的。

所以你真正的問題是一個路徑說明符(字符串)是否被包含在另一箇中。因此,將路徑檢查爲字符串是正確的方法。

+0

這是對問題複雜性的很好的描述。謝謝。 :) – 2012-03-13 01:32:33

1

我認爲一個簡單的字符串匹配是做正確的方式:

if (![directoryPath hasSuffix:@"/"]) directoryPath = [directoryPath stringByAppendingString:@"/"]; 
if ([filePath hasPrefix:directoryPath]) { 
    // ... 
} 

請注意,這並不是對付介紹了符號鏈接,或相對路徑併發症。

相關問題