2014-12-07 101 views
0

我需要this.Normally幫助如果我使用的OpenFileDialog,我一般會還給像這樣的FileName屬性:[C#]文件路徑中逐字字符串文字?

string path = "C:\\Users\\Users\\SkyDrive\\Study Stuffs\\C and C++ development\\Comp Sci 322 - C Sharp\\Projects\\Main_UI_Older\\Test Case\\a test.xml"; 

,如果我用它來創建一個新的FileStream關閉呢?這將直接工作。 I.E:

FileStream my_fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); // Works just fine. 

但是,這將拒絕使用WebClient.DownloadFile方法。

 WebClient my_downloader = new WebClient(); 
     my_downloader.DownloadFile("[URL HERE]", path); //Will not work. WebException 
     my_downloader.DownloadFile("[URL HERE]", @path); //Works. 

我不得不使用路徑前面的「@」來讓它工作。網上搜索的一點點讓我用「逐字串文字」撓我的腦袋。我搜索了一下,但仍然讓我撓了撓頭。我做了這個例子:

string test_1 = "C:\\Test"; 
    Console.WriteLine(@test_1);  //Print C:\Test 
    Console.WriteLine(test_1);  //Print C:\Test 

有人可以解釋這個嗎?謝謝!

+1

你的webclient給出了什麼例外? – 2014-12-07 02:50:56

+2

你的例子沒有意義。在C#中兩個完全不同的方式使用'@'字符。如果它在_string literal_之前(即在一對雙引號之間寫入一些文本),那麼它指定一個「逐字串」,就像你發現的那樣。這將關閉反斜槓轉義,並且對指定文件路徑很有用。如果它在一個標識符之前,就像在你的'@ path'和'@ test_1'例子中那樣,它只是讓你在你的程序中使用保留字的一種方式。例如。你可以命名一個變量'@ for',即使'for'不允許。 – 2014-12-07 02:57:12

+0

它只是說WebException是未處理的。 – 2014-12-07 02:59:00

回答

0

WebClient.DownloadFile(Uri address, string fileName)實際上只是調用內部下列

fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); 

在對所有的推理是一樣的你的

FileStream my_fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); 

看來異常沒有與文件名,在所有相關的例子,必須是別的東西

+0

我會嘗試重新安裝Visual Studio以查看是否有幫助。因爲在Peter Duniho關於使用變量「@」前的帖子後,爲什麼編譯器給我帶來了麻煩,這只是沒有意義。 – 2014-12-07 03:10:06

+0

重新安裝不會幫助,嘗試一個乾淨的和重建,有時它可以幫助 – 2014-12-07 03:10:40

+0

嘿,一個快速修復和一個新的解決方案(複製和粘貼代碼)。它現在正常工作...感謝您的時間和幫助,愚蠢的我。 – 2014-12-07 03:21:27