[Asp.net]c#中的斜杠和反斜線

來源:互聯網
上載者:User

標籤:結果   序列   cep   路徑   網路應用   char   csdn   問題   har   

正斜杠(/)與反斜線(\)總結

 正斜杠/表示除法,分隔。在windows系統中通常用來分隔命令列參數,/表示選項等。不能作為檔案名稱。

  反斜線\,在windows系統中用來表示目錄。

  而在unix系統中,/表示目錄。由於web遵循unix命名,所以在網址(URL)中,/表示目錄。

  C#中反斜線\與斜杠轉移字元路徑的問題

  在C#中 \ 是逸出字元,如下所示

  

逸出序列

字元

\’

單引號

\”

雙引號

\\

反斜線

\0

\a

警告

\b

退格

\f

換頁

\n

換行

\r

斷行符號

\t

水平定位字元

\v

垂直定位字元

  就比如說要輸出這一段字串 “/_\” 可能你會認為是這樣寫 @""/_\""

  但這樣寫編譯器都不讓你通過了,但看上表所示,你可以這麼寫 "\"/_\\\""

  另外在擷取檔案路徑的時候 很多人喜歡用 d:\test.txt

  然後就會發生所謂的逸出字元錯誤了

  解決的辦法一般人是使用 @d:\test.txt 我不知道這樣寫是否會帶來一些問題

  但我一直的做法是d:/test.txt 也完全可以訪問

  在網上找了下, 似乎斜杠與反斜線最大的區別就是

  網路中不能以斜杠在windows系統中通常用來分隔命令列參數,/表示選項等。

  算術運算子/用來取商,如5/2=2.5

引用說明:有正斜杠與反斜線之分,正斜杠,一般就叫做斜杠,符號為“/”;反斜線的符號為“\” 引用斜杠(/)在JAVA中沒有什麼特別的意義,就是代表一個字元‘/’; 
反斜線(\)則不然,它和緊跟著它的那個字元構成逸出字元,如“\n”(表示換行)、“\””(表示字元‘”’)等,所以在字串中要表示字元‘\‘要用“\\”來表示,例:如果你這樣定義一個字串String s = “name\sex”是錯誤的,要這樣定義String s = “name\\sex”; 
引用注意:在Regex中的“\\”表示和後面緊跟著的那個字元構成一個逸出字元(姑且先這樣命名),代表著特殊的意義;所以如果你要在Regex中表示一個反斜線\,應當寫成“\\\\”。如果你這樣獲得一個Matcher,Matcher m = Pattern.compile(“\\”).matcher(“\\”)將會報錯,你應當這樣寫Matcher m = Pattern.compile(“\\\\”).matcher(“\\”)才是正確且匹配的引用接下來我們來看一下String類中replace(CharSequence target,CharSequence replacement)方法與replaceAll(String regex, String replacement)方法的區別:

public static void main(String[] arg)throws OgnlException {String s ="sdf\\a\\aa";//把s中的反斜線\ 替換為\\System.out.println(s);System.out.println(s.replaceAll("\\\\", "\\\\\\\\"));System.out.println(s.replace("\\", "\\\\"));}

引用可以看出上面兩種都返回相同的替換結果。 
這 裡的關鍵是String.replaceAll()是用regular expression 來作為參數的。但是java本身的字串對於轉義符\也有類似的處理。首先,java會把“\\\\”解釋成一個字串(其中包含兩個char)。接下來,由於replaceAll是以Regex作為參數,所以“\\”被解釋成一個regex。對於一個regex來說這就代表著一個字元,就是“\”。對後面的那個8個\來說,最終會被解釋成“\\”。 
換言之,假設String.replaceAll()是以一般字元串,而不是regex作為參數,那麼這樣寫代碼: String target = source.replaceAll(‘\\‘, ‘\\\\‘); 就可以了。

  正斜杠(左斜杠),符號是"/";反斜線(右斜杠),符號是"\"。

  在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的後續版本已經使用其它方法(比如檔案名稱用雙引號括住)解決了空格問題。

正斜杠,又稱左斜杠,符號是"/";
反斜線,也稱右斜杠,符號是"\"。

經常很迷惑正斜杠與反斜線到底有何區別?以下是一些總結:

DOS路徑:
C:\WINDOWS\SETTING   ..這是反斜線的作用後面跟著的是檔案名稱
C:\dir /P            ...這就是正斜杠後面是一個名令的參數dir 是命令.

C#中:

在C#中 \ 是逸出字元,如下所示

逸出序列 字元
\’ 單引號
\” 雙引號
\\ 反斜線
\0
\a 警告
\b 退格
\f 換頁
\n 換行
\r 加車
\t 水平定位字元
\v 垂直定位字元

 

 

 

 

 

 

 

 

 

 

 

 

 

另外在擷取檔案路徑的時候 很多人喜歡用 "d:\test.txt"    ,然後就會發生所謂的逸出字元錯誤了 
解決的辦法一般人是使用@"d:\test.txt"

windows系統:

反斜線\,在windows系統中用來表示目錄。
正斜杠/,網址、Url地址。

Asp.net中:
"../ "   表示目前的目錄的上級目錄,即當前的父目錄;
"/"      表示網站的根目錄;

 

原文連結: http://www.mamicode.com/info-detail-69694.html

[Asp.net]c#中的斜杠和反斜線

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.