Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Работа с файлами по маске. (http://forum.oszone.net/showthread.php?t=238882)

Sadhacker 19-07-2012 01:09 1954573

Работа с файлами по маске.
 
Вот пишу простой код по удалению файла если он *.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 19-07-2012 01:12 1954578

Код:

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

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

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

LilLoco 19-07-2012 07:39 1954639

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

Код:

foreach (FileInfo file in dir.GetFiles("*.txt"))           
  {                 
file.Delete();             
}


Delirium 19-07-2012 08:03 1954647

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

Код:

if (file.Extension.ToLower() == "txt")

LilLoco 19-07-2012 09:34 1954688

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 20-07-2012 00:50 1955127

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

Цитата Delirium
Extension.ToLower() »

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

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

Sadhacker 20-07-2012 01:07 1955133

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

Delirium 20-07-2012 02:14 1955144

LilLoco, +1. Я и не знал, что GetFiles регистронезависима :)
Цитата:

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

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

Цитата:

Цитата Sadhacker
не подскажите как правильно написать функцию для скачивания файла с фтп по маске. »

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

LilLoco 20-07-2012 07:33 1955186


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

if (file.Extension.ToLower() == ".txt")

Sadhacker 20-07-2012 11:40 1955336

Delirium, ок, создам новую.


Время: 05:06.

Время: 05:06.
© OSzone.net 2001-