1

我已经搜索了大约一个小时,但无法找到解决问题的方法。我试图在某个目录中显示所有 .txt 文件,除了以“_days.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);   
    }
}
4

2 回答 2

4

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

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

foreach (FileInfo file in files)
{
    if (!file.Name.EndsWith("_days.txt")) 
    {
        listBox1.Items.Add(file.Name);   
    }
}
于 2013-06-10T17:05:06.180 回答
3

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

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

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

于 2013-06-10T17:05:18.537 回答