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:usersamaresub.xls");
    

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

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

这总是很好用的。所以我想知道为什么这次没有。显然,C#在1)中错误地转义了路径。

显然workSheet.SaveAs()自己对路径进行验证和修复。因此,你(理所当然地)因使用无效格式而受到惩罚。通常接受该格式,但"通常"与"始终"不同。

我已经尝试过您的路径,但它确实失败了,并显示一条消息,说明路径无效或不可写。我还尝试将文件写入Documents子文件夹(授予写入权限的子文件夹)中,但同样的错误再次出现。因此,这无疑是Excel互操作语法分析器内部的一个问题。我认为,在windows中,应该避免使用此路径分隔符。

如果使用逐字逐句定义的字符串,则在字符串前面加上@字符

workSheet.SaveAs(@"c:usersamaresub.xls");

所有工作均按预期进行。

最新更新