3 votes

Dézipper sans invite

Je suis en train de créer une application pour décompresser des fichiers zip sans demande. J'utilise une image MAC OS 10.5 dans Vmaware.

Je suis nouveau dans la programmation de cacao. J'ai cherché quelques codes à ce sujet, mais cela ne fonctionne pas Je ne reçois pas de message d'erreur ou d'avertissement S'il vous plaît, dites-moi quelle est la bonne solution Le fichier Zip ne s'extrait pas et mon application se ferme après un certain temps. Je veux dézipper le fichier sans message d'avertissement et en utilisant une application d'archivage tierce.

Je veux décompresser mon fichier au même endroit que son fichier ZIP.

Voici mon code :

/* 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];

-Merci -Avec mes salutations !

7voto

Black Frog Points 6902

J'ai pris votre code et j'ai changé certaines des options. Vous devez spécifier le chemin complet pour tout.

#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;
}

0voto

mipadi Points 135410

Je ne sais pas si c'est votre seul problème, mais vous devez développer les tildes ( ~ ) sur votre chemin. Normalement, cela est fait par l'interpréteur de commandes, mais si vous n'utilisez pas l'interpréteur de commandes, vous devez le faire vous-même. Heureusement, il existe un NSString pour faire exactement cela, vous pouvez donc faire [@"~/Desktop/demos.zip" stringByExpandingTildeInPath] et [@"~/Desktop" stringByExpandingTildeInPath] .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X