Как да запазя файл във временна директория от файлов браузър

Използвам този метод, за да отворя файловия браузър и да търся само файл с изображение.

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