ошибка копирования system(), в то время как cmd copy работает
Вопрос
В разделе 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, если вы отобразите этот путь в сообщении.