2016-07-01 140 views
0

假設我有一個文件夾,並在此文件夾中是一個名爲im1.png的圖像。我想im1.png被刪除,當我保存另一個圖像名爲im1.jpgim1.bmp左右......(同名,但不同類型)在此文件夾中。我寫下面的代碼,但是這個代碼只是刪除了具有相同名稱和相同類型的文件。請幫我...如何替換具有相同名稱但不同類型的文件夾中另一圖像的圖像?

string CopyPic(string MySourcePath, string key, string imgNum) 
    { 
     string curpath; 
     string newpath; 

     curpath = Application.Current + @"\FaceDBIMG\" + key; 

     if (Directory.Exists(curpath) == false) 
      Directory.CreateDirectory(curpath); 

     newpath = curpath + "\\" + imgNum + MySourcePath.Substring(MySourcePath.LastIndexOf(".")); 

     string[] similarFiles = Directory.GetFiles(curpath, imgNum + ".*").ToArray(); 

     foreach (var similarFile in similarFiles) 
      File.Delete(similarFile); 

     File.Copy(MySourcePath, newpath); 

     return newpath; 
    } 
+0

不相關的問題,但你並不需要檢查'Directory.Exists(curpath)' ,只需調用'Directory.CreateDirectory(curpath);'每一次,如果目錄已經存在,函數什麼也不做(實際上,它實際上會返回現有目錄的'DirectoryInfo'對象,但是你沒有使用函數的結果,所以對於你的用例它什麼都不做)。 –

+0

@Scott Chamberlain:謝謝,我編輯了我的問題。這段代碼會檢查一個文件是否已經存在。我的問題是文件不與目錄。 – Saeid

回答

2

下面是做到這一點的一種方法:

string filename = ...; //e.g. c:\directory\filename.ext 

//Get the directory where the file lives 
string dir = Path.GetDirectoryName(filename); 

//Get the filename without the extension to use it to search the directory for similar files 
string filenameWithoutExtension = Path.GetFileNameWithoutExtension(filename); 

//Search the directory for files with same name, but with any extension 
//We use the Except method to remove the file it self form the search results 
string[] similarFiles = 
    Directory.GetFiles(dir, filenameWithoutExtension + ".*") 
    .Except(
     new []{filename}, 
     //We should ignore the case when we remove the file itself 
     StringComparer.OrdinalIgnoreCase) 
    .ToArray(); 

//Delete these files 
foreach(var similarFile in similarFiles) 
    File.Delete(similarFile); 
+0

非常感謝。我對你的答案做了一些修改,但是我有下面的例外!你的答案似乎是正確的,但我不知道爲什麼我有一個例外!我用這段代碼編輯了我的問題。請看看。 '(「該進程無法訪問文件'E:\ FaceAuthentication \ FaceApp \ bin \ Debug \ FaceApp.App \ FaceDBIMG \ 23 \ 5.jpg',因爲它正在被另一個進程使用。」)\t' – Saeid

+0

你是目前使用這個文件(5.jpg)? –

+0

根本不是.... – Saeid

相關問題