NSFileManager:enumeratorAtURL:向NSFileManager返回一个不同forms的URL:URLForDirectory

如果我使用NSFileManager:URLForDirectory获取我的沙箱的Application Support目录,那么我找回以下URL:

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

但是,如果我使用NSFileManager:enumeratorAtURL来search目录,我找回了表单的URL:

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

这是我造成的问题,因为我正在做urlsearch/replace操作和差异导致不匹配。 我在之前的其他地方遇到过这种差异,然后我的解决scheme是使用URL(使用NSURL:path )而不是原始URL的path,但是在这种情况下不会生效,因为path是:

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

我想要做的是这样的:我可以在我的应用程序支持目录中具有相同的名称,但位置不同的任何数量的文件,我需要提取相对于应用程序支持目录的path。 即如果我有以下

 /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:返回相同的path,但由于它们在硬件上的差异而失败。

有没有办法让enumeratorAtURL:URLForDirectory:返回相同的path,或者如果不是有一种替代的优雅的方式提取子path到我目前正在做的?

var被链接到/private/var/

调用[url URLByResolvingSymlinksInPath]修复它。

请参阅iOS文件path上的/ private前缀表示什么? 进行更多的讨论。

我不得不切换到这样做:

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