Проблема с получением файлов из папки, ошибка распознавания папки.(Цель с) - PullRequest
1 голос
/ 20 сентября 2011

У меня есть пользователь, который выбирает папку из 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.)" "}

Что происходит?!? Если это не лучший способ сделать это, как я могу получить доступ ко всем файлам в папке?

1 Ответ

0 голосов
/ 20 сентября 2011

Попробуйте использовать этот метод вместо:

- (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;

            }

        }

    }];

Приведенный выше метод получает путь к файлу или папке после того, как пользователь нажал кнопку OK.Попробуйте и посмотрите, работает ли он.Чтобы уточнить, почему я предложил вам использовать NSURL, вот объяснение, которое дает документация Apple:

Предпочтительный способ указать местоположение файла или каталога - использовать класс NSURL.Хотя в классе NSString есть много методов, связанных с созданием пути, URL-адреса предлагают более надежный способ поиска файлов и каталогов.Для приложений, которые также работают с сетевыми ресурсами, URL-адреса также означают, что вы можете использовать один тип объектов для управления элементами, расположенными в локальной файловой системе или на сетевом сервере.

...