【问题标题】:Problem getting files from folder, error recognizing folder. (Objective c)从文件夹中获取文件时出现问题,识别文件夹时出错。 (目标 c)
【发布时间】:2011-11-20 15:07:32
【问题描述】:

我让用户从 NSOpenPanel 中选择一个文件夹。这将返回一个文件路径,例如:file://localhost/Folder。这是我的代码,一切都出错了:

NSURL *filePath = [openDlg URL]; //OpenDlg is my NSOpenPanel
NSString *s = [filePath absoluteString];
NSLog(@"%@",s);
NSError *error;
NSArray *b = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:s error:&error];
if (error) {
    NSLog(@"%@",error);
}
NSLog(@"%lu",b.count);

这里,无论我选择哪个文件夹,都会发送此错误消息:文件夹“文件夹”不存在。” UserInfo=0x10518b320 {NSFilePath=file://localhost/Folder, NSUserStringVariant=( 文件夹 ), NSUnderlyingError=0x10515d5e0 "操作无法完成。(OSStatus 错误-43.)"}

这是怎么回事?!?如果这不是最好的方法,我该如何访问文件夹内的所有文件?

【问题讨论】:

    标签: objective-c directory nsurl nsfilemanager nsopenpanel


    【解决方案1】:

    尝试改用此方法:

    - (NSArray *)contentsOfDirectoryAtURL:(NSURL *)url includingPropertiesForKeys:(NSArray *)keys options:(NSDirectoryEnumerationOptions)mask error:(NSError **)error
    

    您可以直接传入 NSURL 而无需将其转换为 NSString。为了给你一个如何使用它的例子,见下文:

    [[NSFileManager defaultManager] contentsOfDirectoryAtURL:filePathURL 
                                  includingPropertiesForKeys:[NSArray arrayWithObjects:NSURLNameKey, nil]
                                                     options:NSDirectoryEnumerationSkipsHiddenFiles 
                                                       error:&error];
    

    我看不到您如何设置 NSOpenPanel,因此我还将在下面提供如何设置的示例:

    NSOpenPanel *openPanel = [NSOpenPanel openPanel];
    
    [openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
    
            if (result == NSFileHandlingPanelOKButton) {
                NSArray* urls = [openPanel URLs];
    
                NSURL *url = [urls objectAtIndex:0];
                if (url != nil) {
    
                    // If you want to convert the path to a NSString
                    self.filePathString = [url path];
                    // If you want to keep the path as a NSURL
                    self.filePathURL = url;
    
                }
    
            }
    
        }];
    

    上述方法将在用户按下确定按钮后获取文件或文件夹的路径。试一试,看看它是否有效。为了进一步详细说明我为什么建议您使用 NSURL,以下是 Apple 文档给出的解释:

    指定文件或目录位置的首选方法是使用 NSURL 类。尽管 NSString 类有许多与路径创建相关的方法,但 URL 提供了一种更可靠的方式来定位文件和目录。对于也使用网络资源的应用程序,URL 还意味着您可以使用一种类型的对象来管理位于本地文件系统或网络服务器上的项目。

    【讨论】:

      猜你喜欢
      • 2015-06-27
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多