Frage

Ich versuche, 7-Zip zu verwenden, um eine Datei über die system() Funktion in C ++ auf einem Windows XP-Rechner zippen. Ich habe versucht:

(formatiert sein, welches System () erhalten hätte)

"C:\Program Files\7-Zip\7z.exe" a -tzip "bleh.zip" "addedFile.txt"

, die die Fehler ausgespuckt

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

Ich habe mehrere ähnliche Alternativen ausprobiert, aber noch nicht eine Lösung gefunden.

Ich will es versuchen gerade aus seinem Installationsverzeichnis zu laufen, so dass, solange ein Benutzer 7-Zip installiert sie in der Lage sein wird, zu funktionieren. Dies ist für ein Haus in Dienstprogramm.

EDIT: wie gewünscht, das sind die tatsächlichen Codezeilen:

std::string systemString = "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip \"" + outDir + projectName + ".zip" + "\" \"";
//...
std::string finalSystemString = systemString + *i + "\"";
system( finalSystemString.c_str() );

*i ist ein Iterator auf eine bestimmte Datei, die hinzugefügt wird, zu werden.

War es hilfreich?

Lösung

es sieht aus wie etwas die Anführungszeichen um das erste Argument Strippen. Sie könnten mit zusätzlichen Anführungszeichen spielen, um zu versuchen, dieses Problem zu beheben, oder Sie können die MS-DOS kompatibel kurzen Pfadnamen für 7z.exe mit dem Win32-API GetShortPathName

Der kurze Weg Räume nicht darin hat, wird es so etwas wie "C: \ PROGRA ~ 1 \ 7-ZIP \ 7Z.EXE" sein

Andere Tipps

Haben Sie versucht, die Räume zu entkommen, das heißt "C: \ Programme \ Files \ 7-Zip \ 7z.exe"? Das könnte funktionieren, obwohl ich weiß nicht, die Besonderheiten des Systems ().

Ein weiterer Ansatz wäre die benutzen Create Funktion in dem Windows-API. Es kann mit Leerzeichen umgehen. „C: \ Program Files“ gemäß seiner Dokumentation

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top