Как сохранить файл во временный каталог из файлового браузера

Я использую этот метод, чтобы открыть файловый браузер и найти только файл изображения.

NSOpenPanel* openPanel = [NSOpenPanel openPanel];
NSArray* imageTypes = [NSImage imageTypes];
[openPanel setCanChooseFiles:YES];
[openPanel setCanChooseDirectories:NO];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setResolvesAliases:YES];
[openPanel setAllowedFileTypes:imageTypes];
[openPanel setPrompt:@"Upload"];
[openPanel setDirectoryURL:[NSURL fileURLWithPath:NSHomeDirectory()]];
[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
    [openPanel close];

При нажатии кнопки «Загрузить» диалоговое окно закрывается. Как я могу сохранить открытое изображение во временный каталог под определенным именем? Спасибо


person Tom Hobson    schedule 24.09.2014    source источник


Ответы (1)


Класс NSOpenPanel не выполняет никакой обработки файлов. Чтобы получить файл, выбранный пользователем, вы можете использовать его метод URLs, а затем скопировать файл по этому URL-адресу в место назначения, используя NSTemporaryDirectory(). Вот пример (непроверенного) кода:

NSOpenPanel* openPanel = [NSOpenPanel openPanel];
NSArray* imageTypes = [NSImage imageTypes];
[openPanel setCanChooseFiles:YES];
[openPanel setCanChooseDirectories:NO];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setResolvesAliases:YES];
[openPanel setAllowedFileTypes:imageTypes];
[openPanel setPrompt:@"Upload"];
[openPanel setDirectoryURL:[NSURL fileURLWithPath:NSHomeDirectory()]];
[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
   if (result != NSOKButton) {
       return;
   }

   NSString *myString = [[[openPanel URLs] objectAtIndex:0] absoluteString];
   NSError *error = nil;
   [[NSFileManager defaultManager] copyItemAtPath:myString toPath:NSTemporaryDirectory() error:&error];
   if(error) {
       // Error! Tell the user by showing an NSAlert, etc.
   } 
}];

Это довольно просто, и если бы вы искали в сети «как скопировать файл с помощью Cocoa», то вы бы нашли множество ответов. То же самое для доступа к файлам, возвращаемым NSOpenPanel.

person SevenBits    schedule 24.09.2014