我在 SFTP 服務器上有一個檔案夾,里面有一堆檔案。有 6 個不同的檔案,每 60 分鐘創建一次。每個都帶有日期和時間戳,并保存 3 天。
FilesCodes_Critical.2022-03-17_11-16-22-614.json
FilesCodes_Critical.2022-03-17_12-12-16-818.json
FilesCodes_Critical.2022-03-17_13-11-43-025.json
TransactionAudit.2022-03-14_11-16-23-530.json
TransactionAudit.2022-03-14_12-12-19-764.json
TransactionAudit.2022-03-14_13-11-45-454.json
我正在創建幾個每小時運行一次的行程,并將獲取一個特定的檔案并進行處理。我知道我可以使用Name.StartsWith來獲取正確的檔案,但我不知道如何獲取最新的檔案。我認為LastWriteTime可以使用,但我不知道如何比較它。
fileNamePat = "FileCodes_Critical";
try {
sftpc.Connect();
var files = sftpc.ListDirectory(sFTPPath);
foreach (SftpFile file in files)
{
if (file.Name.StartsWith(fileNamePat))
{
string jsonData = sftpc.ReadAllText(file.FullName);
DataSet ds = JsonConvert.DeserializeObject<DataSet>(jsonData);
}
}
} catch (Exception ex) {
Console.WriteLine(ex.Message);
}
我想嘗試這樣的事情來比較并將最終檔案放入targetFile
if (file.Name.StartsWith(fileNamePat))
{
if (file.LastWriteTime > targetFile.LastWriteTime)
{
targetFile = file;
}
}
但我不知道在哪里/如何創建,SftpFile targetFile所以比較會起作用。我嘗試SftpFile targetFile = new();并認為我可以檢查它是否為空白然后設定它,但這不起作用。
uj5u.com熱心網友回復:
嘗試在您的檔案集上使用 lambda:
foreach (SftpFile file in files.Where(f => f.Name.Contains(fileNamePat))
.OrderByDescending(o => o.LastWriteTime)
.Take(1))
{
[...]
}
實際上,您不需要為每個。你可以從 lambda 得到你的“目標”:
SftpFile targetFile = files.Where(f => f.Name.Contains(fileNamePat))
.OrderByDescending(o => o.LastWriteTime)
.FirstOrDefault();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449542.html
上一篇:System.InvalidOperationException:LINQ運算式'GroupByShaperExpression:
下一篇:從分號分隔的字串中提取值
