Поиск файлов по заданной маске - C#
Формулировка задачи:
написал поиск файлов по заданной маске(результат скидывает в txt файл),когда вводишь каталог все вроде норм , как только ищешь на диске то выскакивала ошибка о доступе system volume information я ее заексепшенил, но ща вылазит новый трабл непойму почему пишет streamwriter занят другим процессом вот код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Text.RegularExpressions; namespace лаба6 { class Program { static public void podkatalog(DirectoryInfo dir1,Regex r,ref int a) { DirectoryInfo[] di = dir1.GetDirectories(); // Console.WriteLine("\n\nкаталог " + dir1.Name); //if (di.Length != 0) Console.WriteLine("в нем"); // else Console.WriteLine("в нем нет папок"); int m, i; if(a==0) poisk(dir1, r, ref a); foreach (DirectoryInfo l in di) { //Console.WriteLine(l); poisk(l,r,ref a); } for ( i = 0; i < di.Length; i++) { podkatalog(di[i],r,ref a); } } static public void poisk(DirectoryInfo dir,Regex r,ref int a) { try { StreamWriter sw = new StreamWriter("d:\\1.txt", true, Encoding.Default); string filename; int l = 0; if (dir.Exists) { DirectoryInfo[] katal = dir.GetDirectories(); FileInfo[] files = dir.GetFiles(); for (int i = 0; i < files.Length; i++) { filename = files[i].FullName; if (r.IsMatch(filename)) { l++; sw.WriteLine(" файл найден-{0}", files[i].FullName); // Console.WriteLine(" файл найден-{0}", files[i].FullName); a++; } } sw.Close(); } } catch (System.UnauthorizedAccessException ) { Console.WriteLine("нету доступа к "+dir.FullName); } } static void Main(string[] args) { try { string name; int a = 0; char disk; DirectoryInfo dir; int q = 0,z=0; Console.WriteLine("Введите имя каталога или путь к нему к примеру c:\\музыка\\мое\"); name = Console.ReadLine(); dir = new DirectoryInfo(@name); string Mask;Console.WriteLine("Введите имя искомого файла(можно не полностью,заменяя неизвестные символы символом*, к примеру *.doc"); Console.WriteLine("выведет все документы с расширением doc"); Mask= Console.ReadLine(); if (dir.Exists) { Mask = Mask.Replace(".", @"\." /* (".", "\\.") */); // Заменяем ? на . Mask = Mask.Replace("?", "."); // Заменяем * на .* Mask = Mask.Replace("*", ".*"); // Указываем, что требуется найти точное соответствие маске Mask = "^" + Mask + "$"; Regex r = new Regex(Mask, RegexOptions.IgnoreCase); Console.WriteLine("вести поиск в каталоге нажмите 1 "); Console.WriteLine("вести поиск в каталоге и подкаталогах нажмите 2 "); z = int.Parse(Console.ReadLine()); if(z==1)poisk(dir, r, ref a); if(z==2)podkatalog(dir, r,ref a); } else { Console.WriteLine("Такого каталога или диска нету"); Environment.Exit(0); } Console.WriteLine("найдено файлов-" + a); if (a == 0) { StreamWriter sw = new StreamWriter("d:\\1.txt"); sw.WriteLine("файл не найден"); sw.Close(); } else { // File.AppendText("d:\\1.txt").WriteLine("Найдено {0} файлов",a); StreamWriter sw = new StreamWriter("d:\\1.txt", true, Encoding.Default); sw.WriteLine("найдено файлов-" + a); Console.WriteLine("файлы добавлены в папку d:\\1.txt"); sw.Close(); } } catch (System.FormatException) { Console.WriteLine("ошибка ввода"); } } } }
Решение задачи: «Поиск файлов по заданной маске»
textual
Листинг программы
StreamWriter sw = new StreamWriter(@"D:\1.txt", true, Encoding.Default);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д