2011-03-31 56 views
2

我正在创建一个应用程序来解压zip文件而不提示。我在Vmaware中使用MAC OS 10.5映像。解压缩无提示

我是可可程序中的新人。我搜索关于该几个代码,但它不是我working..I没有得到任何错误或警告消息。请请你告诉我它的正确的解决方案.. 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]; 

-Thanks -with的问候!

+0

+1最后的评论 – Till 2011-03-31 12:03:21

回答

6

我把你的代码和改变了一些选项。你已经指定了一切的完整路径。

#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

非常感谢黑蛙它现在工作。我需要用这些代码找出我的错误。 -问候 – t3rmin4t0r 2011-04-04 04:54:14

0

不知道这是你唯一的问题,但你需要在你的路径展开波浪号(~)。通常这是由shell完成的,但如果你不使用shell,你必须自己做。幸运的是,有一个NSString方法可以做到这一点,所以你可以做[@"~/Desktop/demos.zip" stringByExpandingTildeInPath][@"~/Desktop" stringByExpandingTildeInPath]

+0

感谢mipadi,我试过你的建议,但它仍然无法正常工作..文件不是解压缩。任何其他建议你会喜欢吗?在此先感谢..-问候 – t3rmin4t0r 2011-04-01 05:10:13