system()コピーは失敗しますが、cmdコピーは機能します
質問
cmd.exeでは、コマンド" copy 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
。 - 他の詳細は説明しません。
\
はエスケープ文字として使用されるため、文字列に actual '\'
を挿入する方法が必要です。これは、シーケンス \\
で行われます。
したがって、行は次のようになります。
system("copy c:\\hello.txt c:\\hello2.txt");
これにより、次のようなコマンドで不明瞭なエラーが発生する場合があります。
FILE *fh = fopen ("c:\text.dat", "w");
ここで、 \ t
は実際には tab
文字であり、開こうとしているファイルは次のとおりです。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c : TAB e x t 。 d a t 。
他のヒント
あるいは、すべてのWindows関数がUnixスタイルのスラッシュをサポートしています
system("copy c:/hello.txt c:/hello2.txt");
奇妙な「\」を見つけやすいため、これを好む人もいます。
ただし、メッセージにこのパスを表示すると、Windowsユーザーを混乱させる可能性があります。
所属していません StackOverflow