2016-02-28 146 views
1

我正在嘗試設置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。無論什麼設置都沒有效果。

在此先感謝!

回答

1

使用Uri.EscapeUriString,startwith file:///,並改變\/

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

不客氣。 – Sakura