Gru*_*kes 11 cocoa-touch nsfilemanager ios
如果我使用NSFileManager:URLForDirectory那时获取沙盒的Application Support目录,那么我将返回以下URL:
file://localhost/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
Run Code Online (Sandbox Code Playgroud)
但是,如果我NSFileManager:enumeratorAtURL用来搜索目录,我会获取表单的URL:
file://localhost/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application%20Support/
Run Code Online (Sandbox Code Playgroud)
这引起了我的问题,因为我正在进行URL搜索/替换操作,差异导致不匹配.我碰到的这种差异的其它地方之前,然后我的解决方案是使用的URL(使用的路径NSURL:path)而不是原始网址,但这不会在这种情况下,作为工作产生的路径是:
/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support
/private/var/mobile/Applications/EA80DE91-394C-4EAB-B269-1081C859BB0F/Library/Application Support/
Run Code Online (Sandbox Code Playgroud)
我想要做的是:我的Application Support目录中可以有相同名称但位置不同的任意数量的文件,我需要提取相对于Application Support目录的路径.即如果我有以下内容
/Application Support/abc/file.dat
/ApplicationSupport/abc/def/file.dat
Run Code Online (Sandbox Code Playgroud)
我希望能够提取"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:@""];
Run Code Online (Sandbox Code Playgroud)
(MyManager:appSupportDirectory调用NSFileManager:URLForDirectory:使用NSApplicationSupportDirectory)
这在模拟器上工作正常,enumeratorAtURL:并URLFOrDirectory:返回相同的路径,但由于它们在硬件上的差异,它会失败.
有没有办法获得enumeratorAtURL:和URLForDirectory:返回相同的路径,或者如果没有,是否有另一种优雅的方式将子路径提取到我目前正在做的事情?
我不得不改为这样做:
NSDirectoryEnumerator *dirEnum = [self.fileManager enumeratorAtPath: [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"]];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2382 次 |
| 最近记录: |