Typ char * übernimmt Leerzeichen falsch

Rubilak

Grünschnabel
Hallo

Ich weiss das Thema ist etwas merkwürdig, aber irgendwie wusste ich nicht, wie ich das Problem am besten benennen könnte.

Na egal. Hier erstmal der C++ Code:

Code:
     char * puffer;
     AnsiString Komplett;
     AnsiString NeuerOrdner = Edit1->Text + "_mit_Mod\\";
     AnsiString Quellordner = Edit1->Text;
     Komplett = "XCOPY " +Quellordner+ " " + NeuerOrdner+ " /S";
     ShowMessage(Komplett);
     puffer = Komplett.c_str();
     ShowMessage(puffer);
     system(puffer);

Folgendes Problem ich möchte mit Hilfe einer Batch Anweisung einen Ordner in einen neuen Kopieren. Für die Ordnerpfade benutze ich den Typ AnsiString. Danach konvertiere ich den AnsiString in einen char * mit der Anweisung .c_str(). Anschließend führe ich die Batchanweisung aus mit system(...);

Wenn die Ordnernamen keine Leerzeichen enthalten, dann geht alles einwandfrei, aber sobald ein Leerzeichen enthalten ist geht die system(...); nicht richtig. Sie kann den Ordnernamen nicht finden.

Ich habe auch schon eine Prüfausgabe mit ShowMessage gemacht, die zeigt aber vor und nach der Konvertierung das selbe an, woraus ich schliesse, dass ich kein Fehler gemacht habe.

Das selbe Problem hatte ich auch schon mal mit der Funktion mcisendstring(); eine API Funktion zum mp3 abspielen usw.

Kann mir jemand bei meinem Problem helfen?
Ich hab schon Stundenlang rumprobiert, bin total verzweifelt.
 
Hi.

Das Problem liegt nicht an char* oder an AnsiString.

Du mußt den Befehl an die system() Funktion genau so übergeben wie du es auch in der Eingabeaufforderung machen würdest. Wenn der Pfad zum Programm Leerzeichen enthält mußt du den Pfad in Anführungszeichen setzen.

Code:
c:\program files\foo.exe
Der Befehl "c:\Program" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Code:
"c:\program files\foo.exe"
Hello, world
C:
AnsiString Quellordner = '"' + Edit1->Text '"';
Gruß
 
Zurück