我有選擇的拷貝圖像從OpenFileDialog
到一個所定義的位置的方法,以及我要檢查,如果具有相同名稱的圖像存在,並且如果是這樣改變對名稱飛。C# - 定製圖像名稱轉換成字符串
這裏是我的方法:
public void SaveImage(IList<AppConfig> AppConfigs, string ImageNameFilter)
{
string imgPath = AppConfigs[0].ConfigValue.ToString();
Int32 i = 0;
StringBuilder sb = new StringBuilder(selectedFileName);
while (File.Exists(imgPath + "\\" + ImageNameFilter + selectedFileName))
{
sb.Insert(i, 0);
i++;
//ImageNameFilter += (i++).ToString();
}
File.Copy(selectedFile, imgPath + "\\" + ImageNameFilter + selectedFileName);
}
ImageNameFilter
是在每個圖像的開始添加自定義過濾器和用戶需要這個前綴是能夠認識到什麼形象的用途,只能通過看到前綴。 selectedFileName
是用SafeFileName
拍攝的圖像的名稱,這表示它看起來像這樣 - imageName.jpeg
。
有,我有這個代碼的幾個問題。首先,我想改名字這樣的 - imageName1.jpeg, imageName2.jpeg, imageName3.jpeg...imageName14.jpeg..
,但如果我使用selectedFileName
與+=
一切都加入,甚至.jpeg
後,這不是我想要的。我能想到的唯一解決方案是使用regex
,但我真的很想找到另一種方法。
此外,增加i++
並將其與+=
相加會導致不需要的結果,即: imageName1.jpeg, imageName12.jpeg, imageName123.jpeg...imageName1234567.jpeg
。
所以,我怎樣才能得到我想要的結果,我看到這裏的妥協是ImageNameFilter
之後添加下劃線_
,然後在selectedFileName
開頭添加i
而到底,因爲它是在默認情況下。但是在字符串的開頭添加一些東西也是我不知道該怎麼做的。正如你可能看到我嘗試StringBuiledr
+ Insert
,但我沒有得到預期的結果。
謝謝,超過我目前的水平,但會使用它。 – Leron 2013-02-27 14:41:26
@Leron:這不涉及,儘管如果你對LINQ不熟悉,它確實看起來如此。它從一系列整數開始,將每個文件轉換爲一個文件名,並選擇第一個爲'!File.Exists()'條件爲真的文件(如所寫的,如果它嘗試所有20億個候選者並且所有這些都在使用中)。重要的是,所有這些都是懶洋洋地計算出來的,所以它只需要儘可能多的工作來找到一個未使用的文件名(相對於先製作一個20億個候選名單然後嘗試每個名單)。 – Jon 2013-02-27 14:44:19