1. 程式人生 > >C++ -windows與unix路徑分隔符

C++ -windows與unix路徑分隔符

檔案路徑中通常使用正斜槓和反斜槓在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的後續版本已經使用其它方法(比如檔名用雙引號括住)解決了空格問題。
原文連結:http://www.cnblogs.com/duboway/archive/2013/09/22/3333649.html
總結:
1、對作業系統來說,Linux下是反斜槓 /,windows下是斜槓
2、對程式設計來說,斜槓/表示路徑,反斜槓\表示轉義字元
3、vs系列IDE中,include中路徑分隔符,斜槓反斜槓都能用;Linux下只能用斜槓/.