WindowsおよびLinux/Unixシステムでのファイルパスの使用概要

2107 ワード

一、Microsoft Windows
Windowsシステムでは逆斜線''でファイルパスを表しますが、プログラミング言語では逆斜線''は通常、エスケープ文字です.そのため、Windows環境でのプログラムでは、ファイルパスに関する場合、一般的に次のような形式で書く必要があります.
    "D:\\Microsoft Visual Studio 2010 Workspace\\MFCardReader\\"
1番目の反斜線はエスケープ記号で、2番目の反斜線はファイルパスを表します.もし1つの反斜線しかないならば、コンパイラは反斜線をエスケープ文字として処理して、ここで最後に反斜線があるのはコンパイルが通過しないはずで、コンパイルが通過して私たちが望んでいる結果も千里を誤る.
注意すべきは、Microsoft dos(cmd)環境でのdosコマンドは、ファイルパスを処理する際にも逆斜線''でファイルパスを表し、斜線'/'に書かなければならない場合でもありませんが、このように書かなければなりません.
del「D:/Virtual Machines/Fedora 20/filename」/*filenameファイルを削除*/
逆斜線では二重引用符は不要ですが、つけても間違いありません.
    del   D:\Virtual Machines\Fedora 20\filename           or            del   "D:\Virtual Machines\Fedora 20\filename"  
二、Linux/Unix環境下
ファイルパスは斜線'/'で表され、ファイルシステムはルートディレクトリ'/'で始まり、少なくともプログラミング言語ではエスケープと衝突しないことをよく理解しているようです.
Linux/Unix環境でのshellコマンドも、パスを斜線'/'で表示します.
三、プログラミング応用
①コンパイラが文字列の処理中に反斜線に遭遇した場合'はエスケープ記号として認識される.
したがって、Microsoft Windows環境でファイルパスを処理する場合は特に注意が必要です.他の場所では''はあまり使われません.斜線であれば、エスケープは必要ありません.
②コンパイラが非文字列を処理するときに反斜線に遭遇した場合'は継続文字として処理されます.
③SQLでの反斜線'も同様にエスケープとして扱われます.
#define FILE_PATH "D:\\file path\\"

char sql[1024] = {0};
sprintf_s(sql, sizeof(sql), "insert into table values ('%s')", FILE_PATH);
このコードで得られたSQL文は、insert into table values('D:file path')----コンパイラが逆斜線''をエスケープとして使用します
tableの構造にかかわらず、まずこのSQLは間違っています.単一引用符''''も反斜線でエスケープされ、SQLエラーが発生します.
ここでのプロセスはこうです.
第1歩、CのコンパイラはCプログラムをコンパイルして、ファイルの経路をSQLに構成します(2本の反斜線が1本になりました);
ステップ2では、SQL(Structure Query Language)もプログラミング言語であり、そのコンパイラはSQL文をinsert into table values('D:file path')と見なしています.
つまり、最後の単一引用符は文字列の終了フラグではなく文字列の一部と見なされ、SQLのコンパイラは文字列がまだ終了していないと考え、SQLは実行できないに違いない.
   
もちろん、このようなピットはMicrosoftWindowsでしか遭遇できませんが、ほとんどのWindows環境コンパイラで'/'をファイルパスとして認識できる場合は、このようにD:/file path/と書くのが望ましいです.
コンパイラは誤解を生むことはありません.dosコマンドではdel「D:/file path/filename」と書くことができます.
転載があれば出典を明記してください
作者:superbert@csdn