la copia di system () non riesce, mentre la copia cmd funziona
Domanda
In cmd.exe, posso eseguire il comando " copy c: \ hello.txt c: \ hello2.txt " e ha funzionato bene. Ma nel mio programma C, ho eseguito questo pezzo di codice e ho ricevuto il seguente errore:
#include <iostream>
using namespace std;
int main()
{
system("copy c:\hello.txt c:\hello2.txt");
system("pause");
return 0;
}
Output: Il sistema non riesce a trovare il file specificato.
Qualcuno sa cosa sta succedendo qui?
Soluzione
All'interno delle stringhe C (e alcune altre lingue che usano le stesse regole di escape), \
dovrebbe essere \\
poiché è il carattere di escape. Ti permette di inserire, nel testo normale, caratteri non stampabili come:
- il carattere di tabulazione
\ t
. - il carattere di ritorno a capo
\ r
. - il carattere di nuova riga
\ n
. - altri che non tratterò in dettaglio.
Poiché \
viene utilizzato come carattere di escape, abbiamo bisogno di un modo per inserire un effettivo '\'
in una stringa. Questo viene fatto con la sequenza \\
.
La tua linea dovrebbe quindi essere:
system("copy c:\\hello.txt c:\\hello2.txt");
Questo a volte può portare a oscuri errori con comandi come:
FILE *fh = fopen ("c:\text.dat", "w");
dove \ t
è in realtà il carattere tab
e il file che stai tentando di aprire è:
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; c : TAB e x t . d a t .
Altri suggerimenti
In alternativa, tutte le funzioni di Windows supportano le barre in stile Unix
system("copy c:/hello.txt c:/hello2.txt");
Alcune persone preferiscono questo poiché è più facile individuare un '\' strano.
Ma potrebbe confondere gli utenti di Windows se visualizzi questo percorso in un messaggio.