Windows和Linux/Unix系統中文件路徑使用總結

一、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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章