【问题标题】:Slash and Escape Problems in C#C# 中的斜线和转义问题
【发布时间】:2012-07-14 11:56:33
【问题描述】:

我想用 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) 中错误地转义了路径。

【问题讨论】:

  • "c:/users" 不是有效的 Windows 路径。
  • 如果从运行中触发此路径“c:/users”,它可以工作,因此它是有效路径
  • 当正斜杠用于本地路径时,我个人讨厌它。本地路径 - 反斜杠。 Web 路径 - 正斜杠。
  • @HatSoft - WorkSheet.SaveAs() 在这一点上不同意你的观点。它在这里有硬道理。
  • 不是你要求的,但也许你想在处理文件路径时考虑使用 System.IO.Path 类。

标签: c# excel escaping slash


【解决方案1】:

我已经尝试过您的路径,并且可以肯定,它失败并显示一条消息,指出路径无效或不可写。我还尝试将文件写入 Documents 子文件夹(授予写入权限的位置),但再次出现相同的错误。因此,这绝对是 Excel 互操作解析器内部的一个问题。我认为,在 Windows 中,您应该避免使用此路径分隔符。

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

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

一切都按预期工作。

【讨论】:

  • 感谢您重现问题。我将使用 @ 字符。
  • @HenkHolterman,你是对的,但SaveAs 给出的错误信息有点不清楚。所以我刚刚尝试测试它是否与在用户文件夹的根目录中写入所需的权限有关。
【解决方案2】:

显然workSheet.SaveAs() 自己验证和修复路径。因此,您(理所当然地)因使用无效格式而受到惩罚。该格式通常被接受,但“通常”与“总是”不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2013-12-10
    相关资源
    最近更新 更多