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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top