我想保留日誌目錄中現有日誌文件的列表。每當此列表達到最大限制時,說20個文件,我將刪除最舊的日誌文件。檢查一個目錄中的文件並按創建時間順序存儲它們的名稱
每次啓動應用程序時,它都會檢查日誌目錄並將所有日誌文件名保留在列表中。但是這個列表應該按創建時間排序。
這樣做的好方法是什麼?謝謝,
我想保留日誌目錄中現有日誌文件的列表。每當此列表達到最大限制時,說20個文件,我將刪除最舊的日誌文件。檢查一個目錄中的文件並按創建時間順序存儲它們的名稱
每次啓動應用程序時,它都會檢查日誌目錄並將所有日誌文件名保留在列表中。但是這個列表應該按創建時間排序。
這樣做的好方法是什麼?謝謝,
這抓住了所有比最新的20年長的文件並刪除它們:
int numberOfFilesToKeep = 20;
string logFilePath = @"c:\temp";
FileInfo[] logFiles = (new DirectoryInfo(logFilePath)).GetFiles();
var oldFiles = logFiles.OrderByDescending(t => t.CreationTime).Skip(numberOfFilesToKeep);
foreach (var file in oldFiles)
file.Delete(); //you'll want a try/catch here
注意,你可能需要使用LastWriteTime
而非CreationTime
以上,根據關於如何使用日誌文件。
試試這個:
List<FileInfo> fi = new List<FileInfo>();
//load fi
List<FileInfo> SortedFi = fi.OrderBy(t=>t.CreationTime);
using System.Linq;
using System.IO;
DirectoryInfo di = new DirectoryInfo("mylogdir");
FileSystemInfo[] files = di.GetFileSystemInfos();
var orderedFiles = files.OrderBy(f => f.CreationTime);
緩存orderedFiles
,並刷新在需要時您滾動到下一個。
事情是這樣的:
static void Main(string[] args)
{
var files = new List<string>();
foreach (var file in Directory.GetFiles("<path to your log files>"))
{
files.Add(file);
}
files.Sort(
new Comparison<string>(
(a, b) => new FileInfo(b).CreationTime.CompareTo(new FileInfo(a).CreationTime)
)
);
foreach (var file in files.Skip(20))
{
// Delete file.
}
}