2014-12-07 105 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