system () Kopie fehlschlägt, während cmd Werke kopieren
Frage
In cmd.exe, kann ich den Befehl ": \ hello.txt c \ hello2.txt Kopie c" ausführen. Aber in meinem C-Programm, lief ich dieses Stück Code und bekam folgende Fehlermeldung:
#include <iostream>
using namespace std;
int main()
{
system("copy c:\hello.txt c:\hello2.txt");
system("pause");
return 0;
}
Ausgabe: Das System kann die Datei nicht finden angegeben.
Jeder weiß, was hier los ist?
Lösung
Innerhalb C-Strings (und ganz wenigen anderen Sprachen, die die gleichen Escape-Regeln verwenden), sollte \
\\
werden, da sie die Escape-Zeichen ist. Es erlaubt Ihnen, in normalen Text, nicht druckbare Zeichen eingeben, wie:
- das Tabulatorzeichen
\t
. - die Wagenrücklaufzeichen
\r
. - das Newline-Zeichen
\n
. - andere, die ich nicht im Detail.
Da \
als Escape-Zeichen verwendet wird, müssen wir einen Weg ein setzen ist '\'
in einen String. Dies wird mit der Sequenz \\
getan.
Ihre Linie sollte daher sein:
system("copy c:\\hello.txt c:\\hello2.txt");
Dies kann manchmal zu obskuren Fehler mit Befehlen führen wie:
FILE *fh = fopen ("c:\text.dat", "w");
, wo die \t
ist eigentlich der tab
Charakter und die Datei, die Sie versuchen, zu öffnen:
c : TAB e x t . d a t .
Andere Tipps
Alternativ können die alle Windows-Funktionen unterstützen Unix Stil Schrägstriche
system("copy c:/hello.txt c:/hello2.txt");
Einige Leute bevorzugen dies, da es einfacher ist, eine ungerade zu beschmutzen ‚\‘.
Aber es könnte Windows-Benutzer verwirren, wenn Sie in einer Nachricht auf diesen Weg anzuzeigen.