我有一個 C# 語言的專案。它應該采用檔案夾和檔案的名稱。如果檔案夾中不存在檔案,the file not exist將被列印。如果有檔案,則根據檔案創建日期,確定有多少檔案的創建日期小于該檔案。我的代碼如下:
首先,檢查檔案夾中是否不存在檔案,
the file not exist列印DirectoryInfo dir = new DirectoryInfo(@"c:\mydirectory"); string fileName = "myfile.png"; FileInfo[] files = dir.GetFiles("*.*"); Boolean fileFound = false; for(int i=0; i<files.Length; i ) { if(files[i].Name == fileName) { fileFound = true; break; } } if(fileFound==false) { Console.WriteLine("the file not exist"); return; }
然后檔案按創建日期排序:
for (int i = 0; i < files.Length; i ) { for (int n = i; n < files.Length; n ) { if (files[n].CreationTime < files[i].CreationTime) { var temp = files[i]; files[i] = files[n]; files[n] = temp; } } }
3.最后,我在串列中找到檔案的索引并列印出來:
for (int i = 0; i < files.Length; i )
{
if (files[i].Name == fileName)
{
Console.WriteLine("index of this file is: " i);
break;
}
}
我的專案運行良好,但我認為必須有一個更簡單的方法,更少的行。誰能指導我?
uj5u.com熱心網友回復:
您可以使用 linq 輕松完成所有這些步驟:
//1. if the file does not exist in the folder, `the file not exist` is printed
if (!files.Any(f => f.Name == fileName))
{
Console.WriteLine("the file not exist");
}
else
{
//2 ,3 : sort the list and find file index
var indexOfFile = files.OrderBy(item => item.CreationTime)
.Select((item, i) => new { Item = item.Name, Index = i })
.First(x => x.Item == fileName).Index;
Console.WriteLine("index of this file is: {0}", indexOfFile);
}
uj5u.com熱心網友回復:
沒有 linq,避免了區分大小寫的字串比較并且只有一次迭代
string dir = @"c:\mydirectory";
string fileName = @"myfile.png";
System.IO.FileInfo fi = new System.IO.FileInfo(System.IO.Path.Combine(dir, fileName));
if (fi.Exists) {
int count = 0;
foreach (System.IO.FileInfo other in fi.Directory!.EnumerateFiles()) {
if (other.CreationTime < fi.CreationTime) {
count ;
}
}
System.Console.WriteLine("index of this file is: " count);
}
else {
System.Console.WriteLine("the file not exist");
}
uj5u.com熱心網友回復:
有,使用LINQ。你需要有一個List<FileInfo>而不是一個陣列才能作業。
List<FileInfo> files = dir.GetFiles("*.*").ToList();
string fileName = "filetofind.txt";
首先,按創建時間對檔案進行排序。還有OrderByDescending如果你想顛倒順序。
files = files.OrderBy(o => o.CreationTime).ToList();
然后通過檔案名獲取檔案的索引。
int index = files.FindIndex(o => o.Name == fileName);
如果您需要在此程序結束時創建一個陣列,您可以從串列中創建一個。
FileInfo[] fileArray = files.ToArray();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518523.html
上一篇:火花提交到遠程火花
下一篇:將復雜的json反序列化為物件
