La copia del sistema () falla, mientras que la copia cmd funciona
Pregunta
En cmd.exe, puedo ejecutar el comando " copiar c: \ hello.txt c: \ hello2.txt " y funcionó bien. Pero en mi programa C, ejecuté este fragmento de código y obtuve el siguiente error:
#include <iostream>
using namespace std;
int main()
{
system("copy c:\hello.txt c:\hello2.txt");
system("pause");
return 0;
}
Salida: El sistema no puede encontrar el archivo especificado.
¿Alguien sabe lo que está pasando aquí?
Solución
Dentro de las cadenas C (y muchos otros lenguajes que usan las mismas reglas de escape), \
debe ser \\
ya que es el carácter de escape. Le permite ingresar, en texto normal, caracteres no imprimibles como:
- el carácter de la pestaña
\ t
. - el carácter de retorno de carro
\ r
. - el carácter de nueva línea
\ n
. - otros que no cubriré en detalle.
Dado que \
se usa como el carácter de escape, necesitamos una manera de poner un actual '\'
en una cadena. Esto se hace con la secuencia \\
.
Por lo tanto, su línea debe ser:
system("copy c:\\hello.txt c:\\hello2.txt");
Esto puede llevar a veces a errores oscuros con comandos como:
FILE *fh = fopen ("c:\text.dat", "w");
donde \ t
es en realidad el carácter de la tab
y el archivo que intentas abrir es:
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; c : TAB ext.d a t .
Otros consejos
Alternativamente, todas las funciones de Windows admiten barras diagonales de estilo Unix
system("copy c:/hello.txt c:/hello2.txt");
Algunas personas prefieren esto porque es más fácil detectar un '' 'extraño.
Pero podría confundir a los usuarios de Windows si muestra esta ruta en un mensaje.