system () cópia falhar, enquanto cmd copiar obras
Pergunta
Em cmd.exe, eu posso executar o comando "copiar c: \ hello.txt c: \ hello2.txt" e funcionou muito bem. Mas no meu programa C, eu corri este pedaço de código e tenho o seguinte erro:
#include <iostream>
using namespace std;
int main()
{
system("copy c:\hello.txt c:\hello2.txt");
system("pause");
return 0;
}
Saída: O sistema não pode encontrar o arquivo especificado.
Alguém sabe o que está acontecendo aqui?
Solução
cordas Dentro C (e algumas outras línguas que usam as mesmas regras de escape), \
deve ser \\
já que é o caractere de escape. Ele permite que você entrar, em texto normal, caracteres não imprimíveis, tais como:
- o
\t
caractere de tabulação. - o
\r
caráter de retorno de carro. - o
\n
caractere de nova linha. - outras que não vou abordar em detalhes.
Desde \
é usado como o caractere de escape, precisamos de uma maneira de colocar um real '\'
em uma string. Isso é feito com o \\
sequência.
Sua linha deverá ser:
system("copy c:\\hello.txt c:\\hello2.txt");
Isto às vezes pode levar a erros obscuros com comandos como:
FILE *fh = fopen ("c:\text.dat", "w");
onde o \t
é realmente o personagem tab
e o arquivo que você está tentando aberto é:
c : TAB e x t . d a t .
Outras dicas
Como alternativa, todas as funções do Windows suportam barras estilo Unix
system("copy c:/hello.txt c:/hello2.txt");
Algumas pessoas preferem isso, pois é mais fácil de detectar um estranho '\'.
Mas pode confundir os usuários do Windows se você exibir este caminho em uma mensagem.