将图像源设置为包含 % 字符的本地文件路径

本文关键字:文件 路径 字符 图像 设置 包含 | 更新日期: 2023-09-27 18:36:43

我目前正在尝试在 C#/WPF 中设置按钮背景的图像源。我以编程方式执行此操作,因为我为某个可选择目录中的每个(图像)文件显示一个按钮,因此事先不知道按钮的数量。

在遍历文档中的每个图像文件时,我尝试使用以下命令实例化 BitmapImage(用于当前索引):

private string[] _pathsInCurrentFolder;
public ImageSource[] ImagesInCurrentFolder { get; private set; }
//...
ImagesInCurrentFolder[i] = new BitmapImage(new Uri(_pathsInCurrentFolder[i]));

这适用于大多数文件路径。但是,我遇到了一些包含%字符后跟(至少)两个数字的文件。有趣的是,在大多数情况下,这似乎不是问题,但是一个文件将"%7E"作为子字符串。URI 构造函数将其转换为"~"(因为 7E 是 ~的 Ascii),系统在尝试访问文件路径时抛出 FileNotFoundException。

所以我的问题是:如何实例化指向包含子字符串"%7E"或可能的其他中断子字符串的本地图像文件的 ImageSource 对象。我不坚持使用 URI 的解决方案,任何有效的都可以。

我正在运行Win7 Prof 64位,VS 2015与.NET 4.6.1顺便说一句。

我已经尝试过(没有成功):

  • 将"%"替换为Uri.HexEscape("%"),这会破坏所有其他出现"%"的文件路径。
  • 更改Uri构造函数中的UriKind。无论什么设置都没有效果。

提前感谢!

将图像源设置为包含 % 字符的本地文件路径

使用 Uri.EscapeUriString ,从 file:/// 开头,并将'更改为 /

string fileName="D:''a%7E.jpg";
var bmp = new BitmapImage(
    new Uri(Uri.EscapeUriString(@"file:///" + fileName.Replace('''', '/'))));