带扩展名和日期过滤器的C#GetFiles

时间:2018-03-07 14:51:57

标签: c#

我希望只返回今天从包含多个文件和一系列日期的文件夹中创建的.xls文件。

我正在尝试这个:

FBD.SelectedPath = @"\\USMCO\Test\";
string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls")
               .Where(file => new FileInfo(file).CreationTime.Date == DateTime.Today.Date); 

 foreach (string file in files)
 {
     listBox1.Items.Add(Path.GetFileName(file));
 }

但是得到这个错误。 CS0266无法隐式转换类型&System; Collection.Collections.Generic.IEnumerable'到' string []'。存在显式转换(您是否错过了演员?)

我在这里缺少什么? TIA

4 个答案:

答案 0 :(得分:2)

试试这个你缺少调用 .ToArray()方法

string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls")
     .Where(file => new FileInfo(file).CreationTime.Date == DateTime.Today.Date).ToArray();

替代方式

foreach (string file in Directory.GetFiles("", "*.xls").Where(file => 
                                    new FileInfo(file).CreationTime.Date == DateTime.Today.Date))
{
    listBox1.Items.Add(Path.GetFileName(file));
}

答案 1 :(得分:0)

通过调用ToArray方法将枚举转换为数组:

 string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls").Where(file => 
    new FileInfo(file).CreationTime.Date == DateTime.Today.Date).ToArray(); 

答案 2 :(得分:0)

Where扩展方法返回IEnumerable,而不是数组。 但是你不需要一个数组来执行foreach循环,你可以简单地说 将string[] files = Directory....更改为var files = Directory....并按原样继续使用其余代码。

FBD.SelectedPath = @"\\USMCO\Test\";
var files = Directory.GetFiles(FBD.SelectedPath, "*.xls")
    .Where(file => new FileInfo(file).CreationTime.Date == DateTime.Today.Date); 

 foreach (string file in files)
 {
     listBox1.Items.Add(Path.GetFileName(file));
 }

但是,使用DirectoryInfo.EnumerateFiles代替Directory.GetFiles可以做得更好,您可以直接获取FileInfo,而不必为每个文件创建一个:

FBD.SelectedPath = @"\\USMCO\Test\";
var files = DirectoryInfo.EnumerateFiles(FBD.SelectedPath, "*.xls")
    .Where(file => new file.CreationTime.Date == DateTime.Today.Date); 

 // file here is an instance of FileInfo!
 foreach (var file in files) 
 {
     // FileInfo.Name contains only the file name, not the entire path
     listBox1.Items.Add(file.Name); 
 }

答案 3 :(得分:0)

您忘了选择文件名:

string[] files = Directory
    .GetFiles(FBD.SelectedPath, "*.xls")
    .Select(path => new FileInfo(path)
    .Where(file => file.CreationTime.Date == DateTime.Today.Date)
    .Select(file => file.FullName)
    .ToArray(); 

替代解决方案:

string[] files = new DirectoryInfo(FBD.SelectedPath)
    .GetFiles("*.xls")
    .Where(file => file.CreationTime.Date == DateTime.Today.Date)
    .Select(file => file.FullName)
    .ToArray();