将ImageSource设置为包含%字符的本地文件路径
问题描述:
我正在尝试设置C#/ WPF中按钮背景的ImageSource。我以编程方式执行此操作,因为我正在为某个可选目录中的每个(图像)文件显示一个按钮,因此事先不知道按钮的数量。将ImageSource设置为包含%字符的本地文件路径
虽然与迭代在我试图实例化一个BitmapImage的(当前指数)的diectory每个图像文件:
private string[] _pathsInCurrentFolder;
public ImageSource[] ImagesInCurrentFolder { get; private set; }
//...
ImagesInCurrentFolder[i] = new BitmapImage(new Uri(_pathsInCurrentFolder[i]));
这工作对大多数文件路径。但是,我碰到一些包含%字符的文件,后面是(至少)两个数字。有趣的是,在大多数情况下,这似乎不成问题,但是一个文件具有“%7E”作为子字符串。 URI构造函数将其转换为“〜”(As 7E为〜的Ascii),系统在尝试访问文件路径时抛出FileNotFoundException。
所以我的问题是:我如何实例化一个ImageSource对象指向包含子字符串“%7E”的本地图像文件或可能还没有意识到的其他中断子串。我不坚持使用URI的解决方案,任何工作都很好。
我正在运行Win7 Prof 64bit,VS 2015与.NET 4.6.1顺便说一句。
我已经尝试过(没有成功):
- 更换 “%” 与
Uri.HexEscape("%")
,这打破了所有其他文件路径为 “%” 出现次数。 - 更改
Uri
构造函数中的UriKind
。无论什么设置都没有效果。
在此先感谢!
答
使用Uri.EscapeUriString
,startwith file:///
,并改变\
到/
:
string fileName="D:\\a%7E.jpg";
var bmp = new BitmapImage(
new Uri(Uri.EscapeUriString(@"file:///" + fileName.Replace('\\', '/'))));
不客气。 – Sakura