可以根据创建时间对文件进行排序并存储在字符串数组中吗?
Sorting files according to creation time and storing in string array is possible?
我正在尝试根据特定目录的创建时间对文件进行排序,并将它们存储在字符串数组中。但我得到了
错误“无法将类型 'System.IO.FileInfo[]' 隐式转换为 'string[]'。是否无法存储数据
在字符串数组中?
这是我的代码:
string[] getFiles(string path, string text, string fileExtension)
{
try
{
string searchingText = text;
searchingText = "*" + text + "*";
string[] filesArray = Directory.GetFiles(path, searchingText, SearchOption.TopDirectoryOnly).Select(f => new FileInfo(f)).OrderBy(f => f.CreationTime).ToArray();
//filesArray = filesArray.OrderBy(s => s.).ToArray();
//string[] filesArray2 = Array.Sort(filesArray);
List<string> filesList = new List<string>(filesArray);
List<string> newFilesList = new List<string>();
foreach(string file in filesList)
{
if ( file.Contains(fileExtension) == true)
{
newFilesList.Add(file);
}
}
string[] files = newFilesList.ToArray();
return files;
}
catch
{
string[] files = new string[0];
return files;
}
}
你在哪里得到这个错误?该错误是不言自明的:您的函数 returns 是一个字符串数组,您不能简单地将字符串转换为 FileInfo 对象。要获取 FileInfo 对象,请使用:
var fi = new FileInfo(fileName);
但是,如果您只想得到一个排序列表,我会采用不同的方法,例如:
var folder = @"C:\temp";
var files = Directory
.EnumerateFiles(folder)
.OrderBy(x => File.GetCreationTime(x))
.ToArray();
这将为您提供一个包含文件名的字符串列表,按创建日期排序。
编辑:
如果您只需要具有给定扩展名的文件,您可以扩展 LINQ 查询:
var files = Directory
.EnumerateFiles(folder)
.Where(x => x.EndsWith(".ext"))
.OrderBy(x => File.GetCreationTime(x))
.ToArray();
我正在尝试根据特定目录的创建时间对文件进行排序,并将它们存储在字符串数组中。但我得到了 错误“无法将类型 'System.IO.FileInfo[]' 隐式转换为 'string[]'。是否无法存储数据 在字符串数组中?
这是我的代码:
string[] getFiles(string path, string text, string fileExtension)
{
try
{
string searchingText = text;
searchingText = "*" + text + "*";
string[] filesArray = Directory.GetFiles(path, searchingText, SearchOption.TopDirectoryOnly).Select(f => new FileInfo(f)).OrderBy(f => f.CreationTime).ToArray();
//filesArray = filesArray.OrderBy(s => s.).ToArray();
//string[] filesArray2 = Array.Sort(filesArray);
List<string> filesList = new List<string>(filesArray);
List<string> newFilesList = new List<string>();
foreach(string file in filesList)
{
if ( file.Contains(fileExtension) == true)
{
newFilesList.Add(file);
}
}
string[] files = newFilesList.ToArray();
return files;
}
catch
{
string[] files = new string[0];
return files;
}
}
你在哪里得到这个错误?该错误是不言自明的:您的函数 returns 是一个字符串数组,您不能简单地将字符串转换为 FileInfo 对象。要获取 FileInfo 对象,请使用:
var fi = new FileInfo(fileName);
但是,如果您只想得到一个排序列表,我会采用不同的方法,例如:
var folder = @"C:\temp";
var files = Directory
.EnumerateFiles(folder)
.OrderBy(x => File.GetCreationTime(x))
.ToArray();
这将为您提供一个包含文件名的字符串列表,按创建日期排序。
编辑:
如果您只需要具有给定扩展名的文件,您可以扩展 LINQ 查询:
var files = Directory
.EnumerateFiles(folder)
.Where(x => x.EndsWith(".ext"))
.OrderBy(x => File.GetCreationTime(x))
.ToArray();