2012-07-09 403 views
7

有沒有一種方法可以使用Array從目錄中存儲5個最後修改文件的文件位置?C#:從目錄中獲取5個最新(最後修改)的文件

我目前使用以下下列代碼來獲得的最後一個文件:

DateTime lastHigh = new DateTime(1900,1,1); 
string highDir; 
foreach (string subdir in Directory.GetDirectories(path)){ 
    DirectoryInfo fi1 = new DirectoryInfo(subdir); 
    DateTime created = fi1.LastWriteTime; 

    if (created > lastHigh){ 
     highDir = subdir; 
     lastHigh = created; 
    } 
} 

我將使用Array多個文件發送到一個電子郵件地址作爲附件。

UPDATE我目前使用下面的代碼1分鐘後得到最後修改的文件

string myDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), 
        "Test Folder"); 
var directory = new DirectoryInfo(myDirectory); 
DateTime from_date = DateTime.Now.AddMinutes(-1); 
DateTime to_date = DateTime.Now; 
var files = directory.GetFiles().Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date); 

我想存儲從files

+1

你只是需要「.ToArray()」在文件定義的末尾?即'var files = directory.GetFiles()。Where(file => file.LastWriteTime> = from_date && file.LastWriteTime <= to_date).ToArray();' – Michael 2012-07-09 01:35:20

+1

@Michael我不斷收到錯誤「Can not implicitly convert type'字符串'到'System.IO.FileInfo'「 – abramlimpin 2012-07-09 01:47:41

+1

你必須從一個路徑創建一個'FileInfo'對象。使用適當的構造函數'new FileInfo(path)' – 2012-07-09 01:50:10

回答

19
來的文件名列表

以下是LINQ的一般做法:

Directory.GetFiles(path) 
      .Select(x => new FileInfo(x)) 
      .OrderByDescending(x => x.LastWriteTime) 
      .Take(5) 
      .ToArray() 

我懷疑這是不是你想要的,因爲你的代碼示例似乎在不同的任務,但在一般的情況下,這將做你的問題的標題請求。

+0

謝謝!這解決了我的問題! – abramlimpin 2012-07-09 01:57:05

+0

如何以同樣的方式獲得最新修改的目錄? – VarunJi 2014-04-08 08:01:33

+2

雖然這個答案的作品,我認爲在http://stackoverflow.com/questions/1179970/c-sharp-find-most-recent-file-in-dir的答案可能會更好。 – newman 2014-05-21 04:07:02

1

聽起來你想要一個string陣列的目錄中所有文件的完整文件路徑。

鑑於你已經有了FileInfo枚舉,你可以這樣做:

var filenames = files.Select(f => f.FullName).ToArray(); 

如果你想只是文件名,以更換NameFullName

相關問題