.NET - Работа с файлами по маске.

Ответить
Аватара пользователя
Sadhacker

.NET - Работа с файлами по маске.

Сообщение Sadhacker »

Вот пишу простой код по удалению файла если он *.txt. В бат по такой маске все работает, а в с# нифига не хочет. Вот код:



Код:

Код: Выделить всё

       
 private void button1_Click(object sender, EventArgs e)         
 {             
 DirectoryInfo dir=new DirectoryInfo(@"c:\zzz\");             
 foreach (FileInfo file in dir.GetFiles())            
  {                  
string n = "*.txt";             
 if (file.Name == n)              
{                  
file.Delete();              
}             
 }                   
}
Аватара пользователя
Delirium

Re: .NET - Работа с файлами по маске.

Сообщение Delirium »

Код:

Код: Выделить всё

foreach (FileInfo file in dir.GetFiles())            
  {                  
 if (file.Extension == "txt")              
{                  
file.Delete();              
}

Как то так(пишу на память). Не надо никаких стрингов с масками. Ты и так в foreach оббегаешь все файлы в папке, а FileInfo обладает всеми нужными свойствами - имя, путь, РАСШИРЕНИЕ файла и т.д.



И однозначно вызов file.Delete(); надо оборачивать в try... catch, т.к. могут вылететь исключения при попытках удалить файл.
Аватара пользователя
LilLoco

Re: .NET - Работа с файлами по маске.

Сообщение LilLoco »

А можно воспользоваться методом
GetFiles
с параметром маски. И удалить все файлы...





Код:

Код: Выделить всё

foreach (FileInfo file in dir.GetFiles("*.txt"))            
  {                  
file.Delete();              
}
Аватара пользователя
Delirium

Re: .NET - Работа с файлами по маске.

Сообщение Delirium »

LilLoco, если расширение будет .TxT или TXT, то не сработает, как и в моем, впрочем, случае.

В моем варианте надо переписать так:





Код:

Код: Выделить всё

if (file.Extension.ToLower() == "txt")
Аватара пользователя
LilLoco

Re: .NET - Работа с файлами по маске.

Сообщение LilLoco »

Delirium, Позволю себе с вами не согласится. При поиске по маске находятся все файлы. Попробовал, вот что получилось:



Код:

Код: Выделить всё

namespace ConsoleApplication1
{
    class Program
    {
        static void Main ( string[] args )
        {
            DirectoryInfo di = new DirectoryInfo ( "D:\\test" );
            foreach (FileInfo fi in di.GetFiles ( "*.txt" ))
            {
                Console.WriteLine ( fi.FullName );
            }
            Console.ReadKey ( );
        }
    }
}

Список файлов:


читать дальше »




Изображение



Работа программы:


читать дальше »




Изображение
Аватара пользователя
Sadhacker

Re: .NET - Работа с файлами по маске.

Сообщение Sadhacker »

А что значит
Цитата Delirium:



Extension.ToLower()
.NET - Работа с файлами по маске.




?

Проверяет именно разширение файла?

Я сделал так как LilLoco писал, потому что мне не только по разшрению нужно было удалять но и по "?18023?.тхт".

Но возьму на заметку оба способа.



А хотя нет, в некоторых случаях мне нужно использовать именно if для сравнения имен файлов...
Аватара пользователя
Sadhacker

Re: .NET - Работа с файлами по маске.

Сообщение Sadhacker »

И ещо, не подскажите как правильно написать функцию для скачивания файла с фтп по маске. Использую вот эту библиотеку:
http://kbss.ru/blog/lang_c_sharp/107.html
.

Как получить имя файла на фтп я знаю, но как в if задать маску?
Аватара пользователя
Delirium

Re: .NET - Работа с файлами по маске.

Сообщение Delirium »

LilLoco, +1. Я и не знал, что GetFiles регистронезависима Изображение


Цитата Sadhacker:



Проверяет именно разширение файла?
.NET - Работа с файлами по маске.




да. Именно расширение, а ToLower() приводит расширение в нижний регистр.




Цитата Sadhacker:



не подскажите как правильно написать функцию для скачивания файла с фтп по маске.
.NET - Работа с файлами по маске.




Правила форума: одна проблема - одна тема. Если необходимо, создай новую тему, там и обсудим.
Аватара пользователя
LilLoco

Re: .NET - Работа с файлами по маске.

Сообщение LilLoco »

И еще маленькая поправочка. При сравнении расширения файла с необходимым значением, необходимо добавить точку. Свойство FileInfo.Extension возвращает расширение с точкой.



Код:

Код: Выделить всё

if (file.Extension.ToLower() == ".txt")
Ответить

Вернуться в «Программирование и базы данных»