【问题标题】:(C#) unescape string(C#) 转义字符串
【发布时间】:2019-12-17 22:53:17
【问题描述】:

我有以下代码:

string fFileName = @txtSelectedFolder.Text + "\\" + file.Name;

txtSelectedFolder.text 仅包含文件夹路径(例如:c:\temp\test)

file.name 是 FileInfo 类型,其中 name 包含对文件集合中当前选定文件的引用。

只要我使用上面的代码,我的 fFileName 变量就会被一个转义字符串填充,例如 c:\\temp\\test\filename.ext

我如何确保 fFileName 包含文件文件夹(和名称)的未转义版本

【问题讨论】:

  • 如果您从文本框中获取值,您将获取该文本框的 literal 值。你不需要逃避/逃避任何东西。您要将未转义的文件名用于什么目的?
  • 我需要它用于 DiscUtils (vhdx) 类型的项目,该项目需要我要打开的完整文件路径的字符串表示(未转义)另外我刚刚修复了我最初问题中错误的路径
  • 你正在逃避 \\ 。删除... + "\\" + ...
  • 试试这个string fFileName = txtSelectedFolder.Text + @"\" + file.Name;
  • 为什么你的变量名前有@

标签: c# escaping fileinfo


【解决方案1】:

在添加额外的怪异时,您没有使用文字 (\) 。这意味着您的字符串将在编译时转义\,并为您留下一个怪人。

改变你的线路:

string fFileName = @txtSelectedFolder.Text + "\\" + file.Name;

string fFileName = txtSelectedFolder.Text + @"\" + file.Name;

您不需要在变量前面加上 @ 文字符号。

或者:

你可以改用

string fFileName = Path.Combine(txtSelectedFolder.Text, file.Name);

将文件名正确连接到所选文件的路径。

【讨论】:

  • 除非变量以@命名
  • @AndreyKaplun 什么时候变量可以以@ 开头?
  • @maccettura 这可能就是我的意思,当您想使用关键字时,您可以自己尝试使用 @ 符号 ex.@true
  • @AndreyKaplun @ 符号允许您使用 reserved 关键字作为标识符,txtSelectedFolder 不是 C# 中的 reserved 关键字,因此不需要@
猜你喜欢
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
相关资源
最近更新 更多