• Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

Grafische Oberfläche für unrar

finalmagic

Gala
Registriert
17.03.10
Beiträge
51
Hallo mein lieben mitATler,

ich fackel nicht lang rum, sondern komm zu meinem Problem:
Ich möchte in COCOA + Object-C eine grafische Oberfläche für unrar (Winrar) programmieren, als Übung für die Schule. Hier der bereits programmierte Code:

Code:
- (void) startUnrarScript:(NSMutableArray *)argues {
	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
	
	unrar	= [[NSTask alloc] init];
	[unrar setLaunchPath:[[NSBundle mainBundle] pathForResource:@"unrar" ofType:@""]];
	[unrar setArguments:argues];
	
	NSPipe *outputPipe = [NSPipe pipe];
	
	[unrar setStandardOutput:outputPipe];
	
	
	NSFileHandle *readHandle = [outputPipe fileHandleForReading];
	
	[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(taskTerminated:) name:NSTaskDidTerminateNotification object:unrar];
	[unrar launch];
	
	NSData *readData;
    while ((readData = [readHandle availableData]) && [readData length]) {
		NSString *stringData = [[NSString alloc] initWithData:readData encoding:NSASCIIStringEncoding];
		if ([stringData rangeOfString:@"Enter password"].location != NSNotFound) {
			//PASSWORD GEFUNDEN
		}
	}
	[unrar terminate];
	[pool release];
}

- (void) taskTerminated:(NSNotification *)note {
	[unrar release];
	unrar = nil;
}

Ich bekomme Ausgegeben:
UNRAR 3.93 freeware Copyright (c) 1993-2010 Alexander Roshal


Extracting from /Users/Omega/Downloads/...

Nur falls die Datei passwortgeschützt ist, soll ein Fenster erscheinen, welches mit eine Eingabe ermöglicht. Mir fehlt die Zeile : Enter password (will not be echoed) for ... damit ich was für ne if habe!

Ich hoffe Ihr könnt mir helfen!

EDIT:
Hey mal kurz ein Update! Konnte gerade ein bisschen weiterprobieren und habe herausgefunden das der Fehler in dieser Zeile liegt:
Code:

while ((readData = [readHandle availableData]) && [readData length]) {
NSString *stringData = [[NSString alloc] initWithData:readData encoding:NSASCIIStringEncoding];
if ([stringData rangeOfString:@"Enter password"].location != NSNotFound) {
//PASSWORD GEFUNDEN
}
}

Sobald er bei der Zeile zur Passwortabfrage kommt, hängt sich das App auf.
 
Zuletzt bearbeitet:
Hey,

ich kann dir nur mein MacRAR-Programm geben, zum Erkunden, wie es sonst auch noch geht!
Das Programm habe ich vor ca. 4 Jahren mal programmiert und vor Kurzem erst die neueste RAR-Version eingefügt und auf die neuste SDK aktualisiert. Das UI ist komplett mit Bindings gelöst, also nicht erschrecken, wenn du (fast) keine Verbindungen zum UI im Code findest.

Es funktioniert soweit und man kann ein Passwort angeben. Der Benutzer muss aber selber wissen, ob das RAR ein Passwort hat oder nicht. Das lässt einen ja das geniale unrar im Voraus nicht wissen - leider.

Gruss ppocket
 

Anhänge

Known Bug, hab ich vergessen: Hat ein Archiv Dateien mit Leerzeichen im Namen, verreckt das Programm auch, resp. die entsprechende Datei und alle Folgenden werden nicht expandiert.

Gruss ppocket

EDIT: Anführungszeichen oder Backslashes (wie in der bash) nützen nichts... o.0