2014-10-08 93 views
-2

我正在將文件從源文件夾移動到目標文件夾。在移動文件之前,我正在檢查該目錄是否存在,哪個工作正常。問題是我的第二次檢查,我想確保該文件夾在移動文件之前不是空的,但它沒有給我正確的結果。檢查文件夾中是否存在c#

public void MoveFilesFromTempToSourceTbl() 
     { 
      //Moving all files from temp folder to orig folder. 
      string sourceFolder = (twitterDO.Path + "\\" + msgDate.Year.ToString() + "\\" + msgDate.Month.ToString() + "\\" + msgDate.Day.ToString() + "_Temp").Replace("\\", @"\"); 
      string destinationFolder = (twitterDO.Path + "\\" + msgDate.Year.ToString() + "\\" + msgDate.Month.ToString() + "\\" + msgDate.Day.ToString()).Replace("\\", @"\"); 
      string pattern = "*.txt"; 

      if (Directory.Exists(sourceFolder)) 
      { 
       if (File.Exists(pattern)) 
       { 
        foreach (var file in new DirectoryInfo(sourceFolder).GetFiles(pattern)) 
        { 
         file.MoveTo(Path.Combine(destinationFolder, file.Name)); 
        } 
       } 
       if (Directory.GetFiles(sourceFolder).Length == 0) //Before deleting make sure that Temp folder is empty. 
        Directory.Delete(sourceFolder, true); // Delete Temp folder after moving all the contents. 
      } 
     } 

我知道我犯了一些小錯誤,但不知道它是什麼。以下是我立即獲得的結果屏幕截圖。

http://imgur.com/FZvo9cj

+0

你需要'.Count',而不是'.Length'? – alykins 2014-10-08 15:39:34

+0

我會跳過'File.Exists'檢查。在你的for循環中,如果沒有文件匹配模式,你將遍歷一個空集合(實際上什麼都不做)。另外,我會使用'Path.Combine'來定義你的'sourceFolder'和'destinationFolder'變量並避免奇怪的轉義。 – 2014-10-08 15:42:18

+0

@Cory該文件夾中只有txt文件。我發現了一個場景,那裏沒有文件夾中的文件,所以我需要這個檢查。 – user3771772 2014-10-08 15:47:24

回答

5

當前代碼中有一點冗餘。與IF-檢查開始,這裏是我會怎麼處理這:

var sourceDirectory = new DirectoryInfo(sourceFolder); // remember this, it is reused 
if (sourceDirectory.Exists) 
{ 
    // Look for the files in the directory, if none found, will be empty array 
    foreach (var file in sourceDirectory.GetFiles(pattern)) 
    { 
     file.MoveTo(Path.Combine(destinationFolder, file.Name)); 
    } 
    // Re-check the directory for any remaining files 
    if (sourceDirectory.GetFiles(pattern).Length == 0) //Before deleting make sure that Temp folder is empty. 
     sourceDirectory.Delete(); // Delete Temp folder after moving all the contents. 
} 

作爲一個小的性能提升,你可以在for循環與sourceDirectory.EnumerateFiles()取代sourceDirectory.GetFiles()。這將允許您在方法找到它們時開始移動它們,而不是在它們全部找到之後移動它們。

0

你傳入"*.txt"File.Exists()通話時,你需要路過的路徑。

You can read the Documentation here

另外,您可以使用這樣的事情:

Directory.GetFiles(destinationFolder).Contains(filename) 
+0

我嘗試通過傳遞路徑,但仍然返回false。如果你看到int屏幕截圖,我嘗試了兩種方法(它在直接窗口中)。糾正我,如果我錯了。 – user3771772 2014-10-08 15:45:15

+0

@ user3771772屏幕截圖是什麼? – alykins 2014-10-08 15:46:34

+0

查看我的新選擇@ user3771772 – 2014-10-08 15:47:27

0

我同意大衛在這裏,但我也想你流邏輯應該進行調整了一下。 File.Exixts(filename);應該在foreach內部發生。

這將允許你迭代每個文件,如果它存在做某事。

0

嘗試添加下列檢查中存在的位置的任何文件:

bool exist = Directory.EnumerateFiles(sourceFolder, "*.txt").Any(); 
相關問題