Показать полную графическую версию : Работа с файлами по маске.
Sadhacker
19-07-2012, 01:09
Вот пишу простой код по удалению файла если он *.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
foreach (FileInfo file in dir.GetFiles())
{
if (file.Extension == "txt")
{
file.Delete();
}
Как то так(пишу на память). Не надо никаких стрингов с масками. Ты и так в foreach оббегаешь все файлы в папке, а FileInfo обладает всеми нужными свойствами - имя, путь, РАСШИРЕНИЕ файла и т.д.
И однозначно вызов file.Delete(); надо оборачивать в try... catch, т.к. могут вылететь исключения при попытках удалить файл.
А можно воспользоваться методом GetFiles (http://msdn.microsoft.com/ru-ru/library/8he88b63.aspx) с параметром маски. И удалить все файлы...
foreach (FileInfo file in dir.GetFiles("*.txt"))
{
file.Delete();
}
Delirium
19-07-2012, 08:03
LilLoco, если расширение будет .TxT или TXT, то не сработает, как и в моем, впрочем, случае.
В моем варианте надо переписать так:
if (file.Extension.ToLower() == "txt")
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 ( );
}
}
}
Список файлов:
http://s2.hostingkartinok.com/uploads/images/2012/07/ac3f29c9cd95bf05ba4d9921e1d4b4d2.png
Работа программы:
http://s2.hostingkartinok.com/uploads/images/2012/07/732624c6d39edc4e5a773469bb19de8e.png
Sadhacker
20-07-2012, 00:50
А что значит Extension.ToLower() » ?
Проверяет именно разширение файла?
Я сделал так как LilLoco писал, потому что мне не только по разшрению нужно было удалять но и по "?18023?.тхт".
Но возьму на заметку оба способа.
А хотя нет, в некоторых случаях мне нужно использовать именно if для сравнения имен файлов...
Sadhacker
20-07-2012, 01:07
И ещо, не подскажите как правильно написать функцию для скачивания файла с фтп по маске. Использую вот эту библиотеку: http://kbss.ru/blog/lang_c_sharp/107.html.
Как получить имя файла на фтп я знаю, но как в if задать маску?
Delirium
20-07-2012, 02:14
LilLoco, +1. Я и не знал, что GetFiles регистронезависима :)
Проверяет именно разширение файла? »
да. Именно расширение, а ToLower() приводит расширение в нижний регистр.
не подскажите как правильно написать функцию для скачивания файла с фтп по маске. »
Правила форума: одна проблема - одна тема. Если необходимо, создай новую тему, там и обсудим.
И еще маленькая поправочка. При сравнении расширения файла с необходимым значением, необходимо добавить точку. Свойство FileInfo.Extension возвращает расширение с точкой.
if (file.Extension.ToLower() == ".txt")
Sadhacker
20-07-2012, 11:40
Delirium, ок, создам новую.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.