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í?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top