C# - 从DirectoryInfo中删除某些文件

时间:2013-06-10 17:01:42

标签: c# file foreach listbox directory

我一直在搜索大约一个小时,却无法找到解决问题的方法。我试图在除了以“_days.txt”结尾的那些文件中显示所有.txt文件。这是我的代码,希望你能提供帮助。谢谢!

foreach (FileInfo file in files)
{
    if (file.Name.Substring(file.Length - 9, file.Length) != "_days.txt") //I get errors on this row, saying "Arg1, Arg2; Cannot convert from "long" to "int"
    {
        listBox1.Items.Add(file.Name);   
    }
}

2 个答案:

答案 0 :(得分:4)

要回答您的初始问题(并回答您收到错误的原因),您正在尝试对long File.Length使用操作结果(这是另一个问题,因为这是文件的大小,不是文件名的长度)作为string.Substring(int, int)的参数。由于longint之间的操作会返回long(因为它是较大的类型),因此您需要先将其转换为int - 但{ {1}}不是你想要的字段。

尝试使用String.EndsWith(string),因为它更具可读性。

File.Length

答案 1 :(得分:3)

这是一个简单干净的LINQ解决方案,使用Where来过滤我们迭代的列表。

foreach (FileInfo f in files.Where(x => x.Name.EndsWith("_days.txt") == false))
{
    listBox1.Items.Add(file.Name); 
}

在哪里基本上替换你的if语句。迭代的每个对象都将在Where语句中应用条件。