可以根据创建时间对文件进行排序并存储在字符串数组中吗?

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();