Поиск файлов по заданной маске - 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);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5