Domanda

Sto cercando di utilizzare 7-Zip per comprimere un file tramite la funzione system() in C ++ su una macchina Windows XP. Ho provato:

(formattato per essere quello del sistema () avrebbe ricevuto)

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

, che sputò l'errore

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

Ho provato diverse alternative simili, ma non ho ancora trovato una soluzione.

Voglio provare a eseguirlo direttamente dalla sua directory di installazione in modo che, fintanto che un utente ha installato 7-Zip, sarà in grado di funzionare. Questo è per un programma di utilità in applicazione casa.

EDIT: come richiesto sono le linee reali di codice:

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 è un iteratore ad un particolare file che sta ottenendo aggiunto.

È stato utile?

Soluzione

sembra che qualcosa sta spogliando le virgolette intorno al primo argomento. Si potrebbe giocare con le citazioni in più per cercare di risolvere questo problema, o si può ottenere la compatibilità nome di percorso breve MS-DOS per 7z.exe con l'API Win32 GetShortPathName

La breve percorso non avrà spazi in esso, sarà qualcosa come "C: \ PROGRA ~ 1 \ 7-ZIP \ 7Z.EXE"

Altri suggerimenti

Hai provato a sfuggire gli spazi, cioè "C: \ Programmi \ File \ 7-Zip \ 7z.exe"? Che potrebbe funzionare, anche se io non conosco le specifiche di sistema ().

Un altro approccio sarebbe quello di utilizzare il CreateProcess funzione API di Windows. Si può trattare con spazi. "C: \ Programmi" in base alla relativa documentazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top