C#中的斜线和逃逸问题

时间:2012-07-15 09:04:17

标签: c# excel escaping slash

我想用C语言在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");
    
  4. 现在我对这种情况很困惑。我知道2)和3)是绝对正确的,但我习惯于写代码如1):

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

    这总是很好。所以我想知道为什么现在不这样做。显然C#在1)中错误地逃避了路径。

2 个答案:

答案 0 :(得分:4)

显然workSheet.SaveAs()会对路径进行自己的验证和修复。所以你(正当地)因使用无效格式而受到惩罚。这种格式通常被接受,但“通常”与“总是”不同。

答案 1 :(得分:1)

我已经尝试了你的路径并且确定,它失败并显示一条消息,指出路径无效或无法写入。我还尝试在Documents子文件夹中写入文件(授予写入权限的地方),但同样的错误再次出现。所以它确实是Excel互操作的解析器内部的一个问题。我认为,在Windows中,你应该避免使用这个路径分隔符。

如果使用verbatim strings定义的字符串前缀为@ char

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

一切按预期工作。