Распаковать без запроса - PullRequest
3 голосов
/ 31 марта 2011

Я создаю приложение для распаковки zip-файлов без запроса.Я использую образ MAC OS 10.5 в Vmaware.

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

Я хочу распаковать мой файл в том же месте, где находится его ZIP-файл.

Вот мой код:

/* Assumes sourcePath and targetPath are both
   valid, standardized paths. */

// Create the zip task
NSTask * backupTask = [[NSTask alloc] init];
[backupTask setLaunchPath:@"/usr/bin/ditto"];
[backupTask setArguments:
    [NSArray arrayWithObjects:@"-c", @"-k", @"-X", @"--rsrc", 
    @"~/Desktop/demos.zip", @"~/Desktop", nil]];

// Launch it and wait for execution
[backupTask launch];
[backupTask waitUntilExit];

// Handle the task's termination status
if ([backupTask terminationStatus] != 0)
    NSLog(@"Sorry, didn't work.");

// You *did* remember to wash behind your ears ...
// ... right?
[backupTask release];

-Спасибо - с уважением!

Ответы [ 2 ]

7 голосов
/ 01 апреля 2011

Я взял ваш код и изменил некоторые параметры.Вы должны указать полный путь ко всему.

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

// Need to use the full path to everything
// In this example, I am using my Downloads directory
NSString *destination = [@"~/Downloads" stringByExpandingTildeInPath];
NSString *zipFile = [@"~/Downloads/demos.zip" stringByExpandingTildeInPath];


NSTask *unzip = [[NSTask alloc] init];
[unzip setLaunchPath:@"/usr/bin/unzip"];
[unzip setArguments:[NSArray arrayWithObjects:@"-u", @"-d", 
                     destination, zipFile, nil]];

NSPipe *aPipe = [[NSPipe alloc] init];
[unzip setStandardOutput:aPipe];

[unzip launch];
[unzip waitUntilExit];
[unzip release];


// You can get rid of all the NSLog once you have finish testing
NSData *outputData = [[aPipe fileHandleForReading] readDataToEndOfFile];
NSString *outputString = [[NSString alloc] initWithData:outputData encoding:NSUTF8StringEncoding];

NSLog(@"Zip File: %@", zipFile);
NSLog(@"Destination: %@", destination);
NSLog(@"Pipe: %@", outputString);
NSLog(@"------------- Finish -----------");
[outputString release];


[pool release];
return 0;
}
0 голосов
/ 31 марта 2011

Не уверен, что это ваша единственная проблема, но вам нужно расширить тильды (~) на вашем пути. Обычно это делается оболочкой, но если вы не используете оболочку, вы должны сделать это самостоятельно. К счастью, есть метод NSString для этого, поэтому вы можете использовать [@"~/Desktop/demos.zip" stringByExpandingTildeInPath] и [@"~/Desktop" stringByExpandingTildeInPath].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...