2012-07-18 40 views
11

如果我取使用NSFileManager:URLForDirectory然後我得到以下網址我的沙箱的應用支持目錄:的NSFileManager:enumeratorAtURL:返回不同形式的URL來的NSFileManager:URLForDirectory

file://localhost/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/ 

但是,如果我用NSFileManager:enumeratorAtURL搜索目錄我找回形式的URL:

file://localhost/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/ 

這引起了我的問題,因爲我在做URL查找/替換操作和差異導致的不匹配。我在之前的其他地方遇到過這種差異,然後我的解決方案是使用URL的路徑(使用NSURL:path)而不是原始URL,但在這種情況下無法運行,因爲生成的路徑爲:

/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support 
/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support/ 

我想要做的是:我可以在我的應用程序支持目錄中具有相同名稱但位置不同的任意數量的文件,並且我需要提取相對於應用程序支持目錄的路徑。即如果我有以下內容

/Application Support/abc/file.dat 
/ApplicationSupport/abc/def/file.dat 

我想能夠提取「abc」和「abc/def」。我在做這個使用下面的代碼:

NSArray *keys = [NSArray arrayWithObject:NSURLIsRegularFileKey]; 
NSDirectoryEnumerator *dirEnumerator = [self.fileManager enumeratorAtURL:[MyManager appSupportDirectory] 
              includingPropertiesForKeys:keys 
                  options:NSDirectoryEnumerationSkipsHiddenFiles 
                 errorHandler:nil]; 
    for (NSURL *url in dirEnumerator) 
    { 
     if (NSOrderedSame == [[url lastPathComponent] caseInsensitiveCompare:kFilename]) 
     { 
      NSString *appSupportPath = [[MyManager appSupportDirectory] path]; 
      NSString *pathToFile = [url path]; 
      pathToFile = [pathToFile URLByDeletingLastPathComponent]; 
      NSString *subPath = [pathToFile stringByReplacingOccurrencesOfString:appSupportPath withString:@""]; 

(MyManager:appSupportDirectory調用的NSFileManager:URLForDirectory:使用NSApplicationSupportDirectory)

也能正常工作的模擬器,enumeratorAtURL:URLFOrDirectory:返回相同的路徑,但由於其它在硬件上的差異失敗。

有沒有辦法讓enumeratorAtURL:URLForDirectory:返回相同的路徑,或者如果沒有其他優雅的方式提取子路徑到我目前正在做的?

回答

3

我不得不切換到這樣做,而不是:

NSDirectoryEnumerator *dirEnum = [self.fileManager enumeratorAtPath: [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"]]; 
+0

我有同樣的問題。 fileManager的contentsOfDirectoryAtURL返回一個帶有/ private /的URL。我無法比較數據庫中的URL記錄。 – John 2012-10-31 13:05:23