包和 NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:

Packages and NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:

我正要 post 这作为一个问题,但我在措辞问题时解决了它。假设您正在使用如下代码片段中的代码...

  NSFileManager *fm = [NSFileManager defaultManager];
  NSDirectoryEnumerator *enm;

  enm = [fm enumeratorAtURL:path
            includingPropertiesForKeys:[NSArray arrayWithObjects:NSURLNameKey, NSURLIsDirectoryKey, NSURLIsPackageKey, nil]
            options:(NSDirectoryEnumerationSkipsSubdirectoryDescendants|NSDirectoryEnumerationSkipsPackageDescendants|NSDirectoryEnumerationSkipsHiddenFiles)
            errorHandler:^BOOL(NSURL *url, NSError *error){
                 // TODO: Error needed here?
                 return YES;
               }
         ];

如何进入文件夹而不是包

你需要用这样的东西跟进它:

      for (NSURL *url in enm){
        NSNumber *number;
        NSString *name;

        // Retrieve the directory property
        [url getResourceValue:&number forKey:NSURLIsDirectoryKey error:nil];

        // Retrieve the name
        [url getResourceValue:&name forKey:NSURLNameKey error:nil];

        if ([number boolValue] == NO){
          // It's a file!
        } else {
         // It's a folder!

         // Retrieve the package property. 
         [url getResourceValue:&number forKey:NSURLIsPackageKey error:nil];

          if (![number boolValue]){
            // But not a package!
          }
        }
      }

要使上述代码正常工作,您必须确保将 NSURLNameKey、NSURLIsDirectoryKey 和 NSURLIsPackageKey 传递给 includingPropertiesForKeys 参数。