2016-07-26 52 views
2

我遇到了我正在處理的ASP.NET MVC程序的文件更新部分的問題。基本前提是程序將從用戶處獲取已編輯的圖像,然後使用新數據更新舊文件,並保留舊名稱。但由於某種原因,當文件從臨時文件夾移動到它應該去的文件夾時,它會保存爲新文件,同時保留舊文件。 (例如,「foo 1-1.jpg」和「foo 1-1.jpg」存在於同一個文件夾中)。據我所知,這兩個文件名是相同的。爲什麼會發生這種情況,以及如何使它能夠按照預期先刪除舊文件?程序保存一個文件,但不刪除舊文件同名

我在移動它之前得到了舊的文件名,所以應該沒有問題。也沒有路徑問題。

我不確定是否存在傳入路徑的問題,但我使用相同的方法來獲取文件路徑移至,因此我不知道爲什麼它會失敗File.Delete ()而不是File.Move()。

這裏是有問題的代碼:

/// <summary> 
    /// Move a number of files to a single directory, keeping their names 
    /// and overwriting if the switch is toggled. 
    /// Will ignore nonexistent files, and return false if the specified directory does not exist. 
    /// Returns true if it succeeded, false if it did not. 
    /// </summary> 
    /// <param name="filePaths">An array of filepath strings, </param> 
    /// <param name="saveDirectory">The path to the directory to use</param> 
    /// <param name="overWrite">Optional, defaults to false. Whether or not 
    /// to overwrite any existing files with the same name in the new directory. 
    /// If false, skips files that already exist in destination.</param> 
    /// <returns>bool</returns> 
    public static bool MoveSpecificFiles(string[] filePaths, string saveDirectory, bool overWrite = false) 
    { 
     //If the directory doesn't exist, error out. 
     if (!Directory.Exists(saveDirectory)) 
     { 
      return false; 
     } 
     string fileName; 

     try 
     { 
      foreach (string filePath in filePaths) 
      { 
       //Check if the file to be moved exists. If it doesn't, skip it and go to the next one. 
       if (File.Exists(filePath)) 
       { 
        fileName = Path.GetFileName(filePath); 

        //if the overwrite flag is set to true and the file exists in the new directory, delete it. 
        if (overWrite && File.Exists(saveDirectory + fileName)) 
        { 
         //WHERE THE ERROR IS OCCURING 
         File.Delete(saveDirectory + fileName); 
        } 
        //If the file to be moved does not exist in the new location, move it there. 
        //This means that duplicate files will not be moved. 
        if (!File.Exists(saveDirectory + fileName)) 
        { 
         File.Move(filePath, saveDirectory + fileName); 
        } 
       } 
       //throw new ArgumentException(); 
      } 
     } 
     catch (Exception) 
     { 
      //check = saveDirectory + " " + Path.GetFileName(filePaths[0]); 
      return false; 
     } 
     return true; 
    } 

任何幫助將非常感激。

+0

你得到的錯誤信息是什麼? – Shyju

+0

沒有具體的錯誤消息,只是意想不到的行爲。 File.Delete未找到指定的文件,並且可以推斷出它不會生成任何異常,因爲圖像正在移動。問題是它應該找到舊文件,因爲在前面的方法中,我抓取舊文件的名稱以傳入此文件。 –

+0

你確定'overWrite'變量的值是真的嗎? – Shyju

回答

1

唯一的改善,我可以建議是使用Path.Combine方法來生成正確的路徑。使用這種方法,你不必擔心在年底misssing /

var fullPath = Path.Combine(saveDirectory, fileName); 
if (overWrite && File.Exists(fullPath)) 
{ 
    File.Delete(fullPath); 
} 

此外,由於你的,如果條件檢查overWrite變量,確保的overWrite值爲true。我建議你把視覺工作室的斷點,並檢查這個布爾變量的值和fullPath變量屬性。

另外我不確定saveDirectory變量的值是多少。如果它不是Web服務器上的完整物理文件路徑,請考慮使用Server.MapPath來獲取它。

+0

謝謝,我會嘗試。 –

+1

我發現問題,File.Exists正在尋找。jpeg,而舊文件是.jpg –

0

你確定你沒有在你的if-check文件路徑中缺少斜槓嗎?

if (overWrite && File.Exists(saveDirectory + fileName)) 

你可能想嘗試改變你的代碼更喜歡:

if (overWrite && File.Exists(saveDirectory + "\\" + fileName)) 
+0

在傳遞路徑之前,我已經在其他方法中添加了斜線,儘管我可能想要更改它以便在嘗試做任何事情之前在最後查找斜線。 –

0

我發現了這個問題。當原始文件是.jpg文件時,File.Exists正在查找.jpeg文件。因此,即使文件格式確實相同,File.Exists也沒有找到該文件。只是去顯示,檢查您的實際文件擴展名!

相關問題