2013-06-10 3 views
1

Я искал около часа и просто не могу найти решение моей проблемы. Я пытаюсь отобразить все .txt-файлы в определенном каталоге, кроме тех, которые заканчиваются на «_days.txt». Вот мой код, надеюсь, что вы сможете помочь. Благодаря!C# - Удалить определенные файлы из DirectoryInfo

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

Почему бы не использовать 'file.Name.EndsWith'? – wgraham

+0

@wgraham почему бы не сделать это ответом и получить какой-нибудь реп? –

ответ

4

Чтобы ответить на ваш первый вопрос (и ответ, почему вы получаете сообщение об ошибке), вы пытаетесь использовать результат операции против long File.Length (который является еще одним вопросом, так как это размер файла, а не длину имени файла) в качестве параметра до string.Substring(int, int). Поскольку операция между long и int вернет long (так как это больший тип), сначала вам нужно будет преобразовать ее в int, но File.Length - это не поле, которое вы хотите в любом случае.

Попробуйте использовать String.EndsWith(string), так как это более читаемо в любом случае.

foreach (FileInfo file in files) 
{ 
    if (!file.Name.EndsWith("_days.txt")) 
    { 
     listBox1.Items.Add(file.Name); 
    } 
} 
+0

спасибо, друг! –

3

Вот простое чистое, LINQ решение с использованием Where для фильтрации списка мы перебор.

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

Место, где в основном заменяется инструкция if. Каждый объект, который вы перебираете, будет иметь условие в применяемом к нему утверждении Where.

Смежные вопросы