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

时间:2016-02-28 01:26:05

标签: c# wpf uri imagesource

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

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

private string[] _pathsInCurrentFolder;
public ImageSource[] ImagesInCurrentFolder { get; private set; }

//...

ImagesInCurrentFolder[i] = new BitmapImage(new Uri(_pathsInCurrentFolder[i]));

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

所以我的问题是:如何实例化一个ImageSource对象,该对象指向包含子字符串“%7E”的本地图像文件,或者可能是我还不知道的其他破坏子字符串。我不坚持使用URI的解决方案,任何有效的方法都可以。

我正在运行Win7 Prof 64bit,VS 2015 with .NET 4.6.1 btw。

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

使用Uri.EscapeUriString,从file:///开始,将\更改为/

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