2013-05-03 87 views
1

我想要獲取具有\\\值的字符串的長度。當在c#中使用長度屬性時,'\'字符被視爲一個字符

例如"C:\\\Dir1\\\Dir2\\\Dir3\\\Dir4\\\flower.bmp"

該示例的長度爲38個字符。

當我使用長度屬性的長度爲33,基本上它是一種治療\\\爲一個字符。

我一直在使用StringInfo.LengthInTextElements等各種方式,試圖得到這個工作,但沒有喜悅審判。

+0

你應該發佈更多的代碼,所以我們也可以看到爲什麼你要走這條路。 – 2013-05-03 15:57:05

+0

\\ IS一個字符,它的轉義字符/序列。請參閱http://blogs.msdn。com/b/csharpfaq/archive/2004/03/12/what-c​​haracter-escape-sequences-are-available.aspx – asawyer 2013-05-03 15:57:22

回答

0

我的直覺說你有一個更根本的問題,但你嘗試過包裝它一個文字字符串?

string myString = @'C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp' 
0

它是一個字符。如果你希望它是2個字符開頭或者使用@也許\\兩次(沒試過..現在檢查)

+0

你需要添加反引號(\)來正確顯示'\\\\'。 – 2013-05-03 15:58:35

+0

10倍科林,我看到它不好,所以我剛剛寫了「兩次」。 :-) – Dani 2013-05-03 15:59:26

3

由於字符\用於將字符串中的轉義字符,\\實際上代表\字符字面。

嘗試逐字字符串,如果你想\\被作爲兩個字符處理:

@"C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp"

MSDN Reference

+0

這就是我一直在尋找的。謝謝。 – hungryhorse 2013-05-03 16:02:25

0

這是因爲\\在C#字符串被稱爲escape sequence。您的代碼中的字符串:

"C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp" 

當程序加載時,它將成爲磁盤和內存中的字符串。

"C:\Dir1\Dir2\Dir3\Dir4\flower.bmp" 

所以,你的例子的長度確實是 33個字符。原始字符串雖然可能是38個字符的代碼,但僅代表33個真實字符。

0

33是正確的 - \\確實只有一個字符,即\。只有調試器顯示它已被轉義(例如,\分別對於\n\r,換行和回車分別具有特殊含義)。

0

反斜槓\是一個轉義字符,用於在您的字符串中放入特殊字符,如\t爲製表符,\n爲換行符。雙反斜線\\將插入一個反斜槓編譯字符串,而不是你的預期2.答案是使用C#功能@在你的字符串,防止逃逸或逃避所有的反斜線面前 - 它看起來像"C:\\\\Dir1\\\\Dir2\\\\Dir3\\\\Dir4\\\\flower.bmp"

相關問題