文件路徑中一般使用
正斜槓和
反斜槓
在Windows中
C++中「
\\」是一種
轉義字符,他表示一個‘\’,就像\n表示回車同樣。因此C++中的路徑名:
D:\matcom45\doc\users\_themes\m.dat
應爲:
CString filename=_T("D:\\matcom45\\doc\\users\\_themes\\m.dat");
或
CString filename=_T("D:/matcom45/doc/users/_themes/m.dat");
也就是說"\\"其實就是‘\’,這樣寫只是方式轉移字符的發生!!
【注意】在之前windows中的‘
\’和‘
/’是有所區別的,通常‘\’用於(正確應該使用「\\」 ),而‘/’則多用於網頁連接地址等的分隔符。
可是,
如今在windows中已
不在區分
使用這二者,windows下目錄
均可以使用
這二者進行標示。
"./ " 加不加都同樣,就是指當前目錄
"../ " 表示當前目錄的上級目錄,即當前的父目錄 正斜槓,又稱左斜槓,符號是"/";反斜槓,也稱右斜槓,符號是"\"。
由於 \ 在 C/C++/C# 中是轉義前導字符,例如 \n 表明換行。
若是路徑中恰好有相似轉義字符開頭的,那麼就會引發問題,因此路徑中的 \ 必須用 \\ 的形式
Unix中:
在
Unix/Linux中,路徑的分隔採用正斜槓"/",好比"/home/hutaow";而在Windows中,路徑分隔採用反斜槓"\",好比"C:\Windows\System"。
有時咱們會看到這樣的路徑寫法,"C:\\Windows\\System",也就是用兩個反斜槓來分隔路徑,這種寫法在網絡應用或編程中常常看到,事實上,上面這個路徑能夠用"C:/Windows/System"來代替,不會出錯。可是若是寫成了"C:\Windows\System",那就可能會 出現各類奇怪的錯誤了。
至於上述問題出現的緣由,要從字符串解析這方面來分析。
學過編程的人都應該知道,在C裏面,輸出字符串時,若是想輸出一個換行,那就要加上'\n'這個標誌,相似的,輸出一個TAB,就加上'\t',也就 是說,反斜槓("\")這個符號會把跟在它後面的字符結合起來轉義成其它字符。根據這個原理,若是想輸出雙引號('"'),就須要輸入'\"',這樣纔會 將包含了雙引號的字符串正確的寫入內存中。那麼若是想輸入一個反斜槓呢?很簡單,只要敲'\\'就能夠了。
看到這裏或許有些 人已經看出眉目了,若是"C:\Windows\System"這個路徑字符串交給C編譯器編譯,實際寫入內存的字符串並無包含反斜槓"\",甚至緊跟 在反斜槓後面的字母也一塊兒被轉義成了其它的字符,再次調用的話勢必會出問題。
字符串解析不只僅侷限於C編譯器,Java編譯器、一些配置文件的解析、Web服務器等等,都會遇到對字符串進行解析的這個問題,因爲傳統的 Windows採用的是單個斜槓的路徑分隔形式,致使在對文件路徑進行解析的時候可能發生沒必要要的錯誤,因此就出現了用雙反斜槓"\\"分隔路徑的形式。 無論解析引擎是否將反斜槓解析成轉義字符,最終在內存中獲得的都是"\",結果也就不會出問題了。
由此也能夠看出 Windows或者說DOS在設計初期考慮不夠周全,爲了和Unix一些特徵區別開來,將Unix中的正斜槓"/"分隔路徑方式改變成了反斜槓"\"。這樣改變致使的一個問題就是在早期DOS命令行中,正常的文件名是不能包含空格的,若是包含了空格,會致使輸入這樣的文件名時,命令解析沒法將其和參數區分開。例如,想要進入"hutaow yuan"這個目錄(在此先忽略8.3命名規則),直接輸入"cd hutaow yuan",命令行會將其解析爲進入"hutaow"目錄,然後面的"yuan"作參數,這顯然不是所指望的。
而在Unix中,文件名若是包含空格,能夠直接在空格前加上反斜槓"\"進行轉義,從而很好的和命令參數區別出來(參數之間通常使用空格分隔)。仍是上面的例子,在Unix中,只要輸入"cd hutaow\ yuan"(在yuan前面的空格前加上"\"),命令行會正確的辨認出"hutaow yuan"並進入這個目錄。
固然,如今Windows的後續版本已經使用其它方法(好比文件名用雙引號括住)解決了空格問題。