一、Microsoft Windows
Windows系統中以反斜線’\‘表示文件路徑,而在編程語言中反斜線'\'通常爲轉義字符。所以在Windows環境下的程序中,如涉及到文件路徑一般需要寫成如下形式:
"D:\\Microsoft Visual Studio 2010 Workspace\\MFCardReader\\"
其中第一個反斜線爲轉義符,第二個反斜線表示文件路徑。如果只有一個反斜線,編譯器將會把反斜線當做轉義字符來處理,在這裏最後有反斜線應該是編譯不通過的,編譯通過了和我們想要的結果也謬以千里了。
值得注意的是,在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出錯。
這裏的過程是這樣的:
第一步,C的編譯器編譯C程序,將文件路徑組成SQL(兩條反斜線變成了一條);
第二步,SQL(Structure Query Language)也是一種編程語言,它的編譯器將SQL語句看成是這樣的:insert into table values ('D:file path\')
也就是說,最後那個單引號被看成了字符串的一部分,而不是字符串的結束標誌,SQL的編譯器認爲字符串還沒有結束,SQL肯定是無法執行的。
當然,這樣的坑只有在Microsoft Windows下才能碰到,在大部分Windows環境編譯器都能夠識別以‘/’作爲文件路徑的情況下,最好還是寫成這樣D:/file path/
編譯器就不會產生誤會了。在用dos命令時寫成這樣既可:del "D:/file path/filename"
如有轉載請註明出處
作者:super bert@csdn