C#中的斜杠和转义问题

我想用COM写一些数据到C#中的Excel,但是我保存了一个问题。 让我们看看代码:

  1. workSheet.SaveAs("c:/users/amare/sub.xls"); 

    上面的代码会导致错误:

    “Microsoft Excel无法打开文件c://users/amare/sub.xls”。

    但下面的代码工作正常:

  2.  workSheet.SaveAs("c:\\users/amare/sub.xls"); 
  3.  workSheet.SaveAs(@"c:\users\amare\sub.xls"); 

现在我对这种情况很困惑。 我知道2)和3)是绝对正确的,但我习惯于编写代码,如1):

 StreamWriter sw = new StreamWriter("c:/users/amare/desktop/file.txt"); sw.WriteLine("foo-bar"); sw.close(); 

这总是正常工作。 所以我想知道为什么这次没有。 显然C#在1)中不正确的path。

显然workSheet.SaveAs()做了自己的validation和修复path。 所以你(正确地)因为使用无效的格式而受到惩罚。 这种格式通常被接受,但“通常”与“总是”不一样。

我已经尝试过你的path,当然,它会失败,并提示path无效或不可写。 我也尝试写文档子文件夹(授予写权限)的文件,但同样的错误再次出现。 所以在Excel互操作的parsing器中,这确实是一个问题。 我认为,在Windows中,你应该避免这个path分隔符。

如果您使用以@ char为前缀定义string的逐字string

 workSheet.SaveAs(@"c:\users\amare\sub.xls"); 

全部按预期工作。

Interesting Posts