我想用C语言在C#中将一些数据写入Excel,但是我遇到了一个问题。我们来看看代码:
workSheet.SaveAs("c:/users/amare/sub.xls");
上面的代码会导致错误:
“Microsoft Excel无法打开文件c://users/amare/sub.xls。”
但下面的代码运行良好:
workSheet.SaveAs("c:\\users/amare/sub.xls");
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)中错误地逃避了路径。
答案 0 :(得分:4)
显然workSheet.SaveAs()
会对路径进行自己的验证和修复。所以你(正当地)因使用无效格式而受到惩罚。这种格式通常被接受,但“通常”与“总是”不同。
答案 1 :(得分:1)
我已经尝试了你的路径并且确定,它失败并显示一条消息,指出路径无效或无法写入。我还尝试在Documents子文件夹中写入文件(授予写入权限的地方),但同样的错误再次出现。所以它确实是Excel互操作的解析器内部的一个问题。我认为,在Windows中,你应该避免使用这个路径分隔符。
如果使用verbatim strings定义的字符串前缀为@
char
workSheet.SaveAs(@"c:\users\amare\sub.xls");
一切按预期工作。