2013-12-20 150 views
1

我試圖將文本文件移動到文件夾中,但忽略test.txt,其他所有文件都將移動到FileHolder文件夾。當我運行它時,它仍然將所有的txt文件移動到文件夾中。將文件移動到文件夾但忽略某些文件

private void testmodule() 
{ 
    string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    DirectoryInfo d = new DirectoryInfo(filepath); 

    List<String> AllDeskTopFiles = Directory.GetFiles(filepath, "*.txt*").ToList(); 

    foreach (string file in AllDeskTopFiles) 
    { 
     if (file != "test.txt") 
     { 
      FileInfo mFile = new FileInfo(file); 
      if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false) 
       mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name); 
     } 
    } 
} 
+0

這裏有一個提示,看看'file'中的實際值,你的答案應該很明顯。 –

+0

Psst,使用Path.Combine,它會讓你的生活更輕鬆 – Moeri

回答

1

您需要根據文件名進行過濾,而不是完整路徑。

你可能只是做了過濾器的LINQ聲明:

var allDeskTopFiles = Directory 
      .GetFiles(filepath, "*.txt*") 
      .Where(f => !f.EndsWith("test.txt", StringComparison.InvariantCultureIgnoreCase); 


foreach (string file in allDeskTopFiles) 
{ 
    // Move all files now 
1

Directory.GetFiles返回指定目錄下的文件(包括路徑)的名稱。

所以,你需要申請的方法,只提取文件名

foreach (string file in AllDeskTopFiles) 
    { 
     if (Path.GetFileName(file).ToLower() != "test.txt") 
     { 
      FileInfo mFile = new FileInfo(file); 
      if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false) 
       mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name); 
     } 
    } 

也在創造一個FileInfo每一個循環只是爲了測試存在與否的文件似乎有點貴

string destPath = Path.Combine(filepath, "FileHolder"); 
    foreach (string file in AllDeskTopFiles) 
    { 
     string fileToMove = Path.GetFileName(file).ToLower(); 
     if (fileToMove != "test.txt") 
     { 
      string destFile = Path.Combine(destPath, fileToMove); 
      if (!File.Exists(destFile)) 
       File.Move(file, destFile); 
     } 
    } 
+1

有錯字,Path.GetFileName(file =)。ToLower() – Adil

+0

是的,有人已經修復它 – Steve

+0

好的,謝謝你的幫助 – user2184248

2

您的file變量包含完整路徑。

0

下面應該修復它,一個清潔現在方式:

private void testmodule() 
{ 
    string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    DirectoryInfo d = new DirectoryInfo(filepath); 

    List<String> AllDeskTopFiles = Directory.GetFiles(filepath, "*.txt*").ToList(); 

    foreach (string file in AllDeskTopFiles) 
    { 
     //if (file.ToLower().EndsWith("test.txt")) 
     //{ 
     // FileInfo mFile = new FileInfo(file); 
     // if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false) 
     //  mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name); 
     //} 
     FileInfo mFile = new FileInfo(file); 
     if(mFile.Name.ToLower() != "test.txt") 
     { 
      if (new FileInfo(d + "\\FileHolder\\" + mFile.Name).Exists == false) 
       mFile.MoveTo(d + "\\FileHolder\\" + mFile.Name); 
     } 
    } 
} 
0

您可以檢查文件名,如:

  DirectoryInfo dirInfo = new DirectoryInfo("old"); 

     foreach (FileInfo fi in dirInfo.GetFiles("*.txt")) 
     { 
      if (fi.Name != "test.txt") 
       File.Copy(fi.FullName, "new/" + fi.Name); 
     } 

或更改您的代碼來檢查if !file.Contains("text.txt")代替if file != "test.txt

相關問題