ошибка копирования system(), в то время как cmd copy работает

StackOverflow https://stackoverflow.com/questions/237703

Вопрос

В разделе cmd.exe я могу выполнить команду "копировать c:\hello.txt c:\hello2.txt", и это сработало нормально.Но в моей программе на C я запустил этот фрагмент кода и получил следующую ошибку:

#include <iostream>

using namespace std;

int main()
{
    system("copy c:\hello.txt c:\hello2.txt");
    system("pause");

    return 0;
}

Выходной сигнал:Система не может найти указанный файл.

Кто-нибудь знает, что здесь происходит?

Это было полезно?

Решение

Внутри строк C (и довольно многих других языков, которые используют те же правила экранирования), \ должно быть \\ поскольку это экранирующий символ.Это позволяет вам вводить обычным текстом непечатаемые символы, такие как:

  • символ табуляции \t.
  • символ возврата каретки \r.
  • символ новой строки \n.
  • другие, которые я не буду подробно описывать.

С тех пор как \ используется в качестве экранирующего символа, нам нужен способ поместить фактический '\' в строку.Это делается с помощью последовательности \\.

Таким образом, ваша линия должна быть:

system("copy c:\\hello.txt c:\\hello2.txt");

Иногда это может привести к непонятным ошибкам при использовании таких команд, как:

FILE *fh = fopen ("c:\text.dat", "w");

где находится \t на самом деле это tab символ и файл, который вы пытаетесь открыть, - это:

            c:ВКЛАДКАext.dat.

Другие советы

Кроме того, все функции Windows поддерживают косые черты в стиле Unix

system("copy c:/hello.txt c:/hello2.txt");

Некоторые люди предпочитают это, так как так легче заметить нечетное "\".
Но это может сбить с толку пользователей Windows, если вы отобразите этот путь в сообщении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top