2013-08-28 52 views
0

除了那些所有的文件和目錄,我手上有兩個任務刪除列表中的

  1. 獲取10個最新的文件從一個文件夾可以說C:\Temp
  2. 刪除任何其他文件夾和文件。

我得到了第一項使用下面的代碼工作,感謝我們的朋友在堆棧溢出。

var imgFiles = (from f in directory.GetFiles(fileType,SearchOption.AllDirectories) 
          orderby f.LastWriteTime descending 
          select f).Take(numberOfFilesToFetch).ToArray(); 

我需要一些幫助,點2.一些C#示例代碼將是很有益的。

回答

0

如果您只需要刪除我建議你只得到文件的列表中刪除的文件,所以你可以使用跳過代替採取

其他的aproach正在調用GetFiles再次與除了呼叫,如果您不需要在刪除過程中忽略的文件列表不會非常有效

var filesToBeDeleted = (from f in Directory.GetFiles(fileType,SearchOption.AllDirectories) 
          orderby f.LastWriteTime descending 
          select f).Skip(numberOfFilesToFetch).ToArray(); 

foreach (var file in filesToBeDeleted) 
{ 
    file.Delete(); 
} 

string [] subdirectoryEntries = Directory.GetDirectories("c:\\temp"); 

foreach(string dir in subdirectoryEntries) 
{ 
    Directory.Delete(dir) ; 
} 

我建議你添加一個嘗試,趕上了刪除操作

+0

上述工作,但它只會刪除文件不是文件夾。 – Abe

+0

@Abe我剛剛添加了刪除文件夾的部分 –

+0

謝謝。現在起作用了。 – Abe

0
foreach (var file in directory.GetFiles().Except(imgFiles)) 
{ 
    file.Delete(); 
} 
+0

你調用的GetFiles再次是沒有非常有效的。爲什麼不改變原來的LINQ,以便它只有文件被刪除? –

0
var filesToBeDeleted = directory.GetFiles(fileType, SearchOption.AllDirectories) 
           .Except(imgFiles).ToArray(); 
for (int i = filesToBeDeleted.Length; i >= 0; i--) 
    filesToBeDeleted[i].Delete(); 
+0

您再次調用GetFiles,這不是非常有效。爲什麼不改變原來的LINQ,以便它只有文件被刪除? –