Рекурсивный поиск каталогов с помощью C#

Переводы статьи Переводы статьи
Код статьи: 303974 - Vizualiza?i produsele pentru care se aplic? acest articol.
Microsoft Visual C++ .NET версии данной статьи см. 307009.
Microsoft Visual Basic .NET версии данной статьи см. 306666.

В данной статье относится следующие пространства имен библиотеки классов Microsoft платформа.NET Framework:
  • System.IO
Развернуть все | Свернуть все

В этой статье

Аннотация

В данном пошаговом руководстве показано, как рекурсивный поиск подкаталогах файлы в приложении Windows Forms C#. A задана строка поиска, чтобы найти файлы, соответствующие некоторые критерии по маске. При необходимости описывается каждая часть кода. Рабочее Образец кода также приведены в конце данной статьи.

Каталог рекурсия — распространенные задачи ввода-ВЫВОДА для разработчиков. FileSystemObject упрощает эту задачу для модели компонентных объектов (COM) приложения. Теперь эта задача стала еще проще в .NET. Аналогично FileSystemObject, классы в пространстве имен System.IO предоставляет объектно ориентированным способом доступа к файлам и каталоги.

Требования

  • Microsoft Visual C# 2005 или Microsoft Visual C# .NET

Каталог рекурсии

Классы обработки файлов и каталогов находятся в пространстве имен System.IO . Перед началом работы с этими классами, импорте следующие пространства имен в проект:
using System.IO;
Классы пространства имен System.IO предоставляет многие классы, позволяющие работать с файлами и каталоги. Эти классы содержат файл классы, классы каталогов и вспомогательные классы. Многие из этих классов содержит статический методы, которые можно вызвать без необходимости объявляется переменная этого типа. Например, можно использовать объект каталога для получения вложенных каталогах заданного каталог.

Следующий код использует статический метод GetDirectories объекта каталога для возвращения массива строк. Этот массив содержит имена путей каталогов в подкаталоги в каталоге, если таковые имеются.
string[] directories = Directory.GetDirectories("C:\\");
Объект каталога также содержит метод с именем GetFiles позволяет получить массив строк, соответствующих файлов определенным критериям. В следующем примере кода используется объект файла для извлечения всех файлов в каталоге диска C, заканчивающиеся с расширением DLL:
string[] files = Directory.GetFiles("C:\\", "*.dll");
Методы GetFiles и GetDirectories объекта каталога , все, что необходимо для рекурсивного поиска для файлов, найдено соответствие строке поиска. Чтобы рекурсия используется следующий метод:
void DirSearch(string sDir) 
{
	try	
	{
	   foreach (string d in Directory.GetDirectories(sDir)) 
	   {
		foreach (string f in Directory.GetFiles(d, txtFile.Text)) 
		{
		   lstFilesFound.Items.Add(f);
		}
		DirSearch(d);
	   }
	}
	catch (System.Exception excpt) 
	{
		Console.WriteLine(excpt.Message);
	}
}
Приведенный выше код передает строку, которая содержит каталог, требуется выполнить поиск, чтобы DirSearch. Это строковое значение определяет полный путь к каталогу. Вы используется для извлечения подкаталогов каталога, который передается GetDirectories в процедуру. Поскольку GetDirectories возвращает массив, можно использовать для/каждой инструкции для итерации над каждой подпапки. Для каждой подпапки используйте метод GetFiles для просмотра всех файлов в этом каталоге. Значение текстовое поле в форме будет передано GetFiles. В текстовом поле содержится строка поиска, который фильтрует результаты что возвращает GetFiles . Если любые файлы, соответствующие условиям поиска, они добавляются для раскрывающегося списка. Для каждой подпапки, расположенные повторный вызов функции DirSearch и передать его подкаталог. С помощью этого рекурсивный вызов можно выполнить поиск всех подкаталогах указанного корневого каталога.

Полный пример кода

  1. Начните новый проект приложение Windows Visual C#. По умолчанию имеет форму с именем Form1 создан.
  2. В меню Вид выберите для отображения в обозревателе решений.
  3. В обозревателе решений щелкните правой кнопкой мыши форму Form1и выберите команду Просмотреть код.
  4. В окно кода Form1 выделите и удалите все существующий код.
  5. Вставьте следующий код в окно кода Form1.
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.IO;
    
    namespace RecursiveSearchCS
    {
        /// <summary>
        /// Summary description for Form1
        /// </summary>
        public class Form1 : System.Windows.Forms.Form
        {
            internal System.Windows.Forms.Button btnSearch;
            internal System.Windows.Forms.TextBox txtFile;
            internal System.Windows.Forms.Label lblFile;
            internal System.Windows.Forms.Label lblDirectory;
            internal System.Windows.Forms.ListBox lstFilesFound;
            internal System.Windows.Forms.ComboBox cboDirectory;
            /// <summary>
            /// Required designer variable
            /// </summary>
            private System.ComponentModel.Container components = null;
    
            public Form1()
            {
                // 
                // Required for Windows Form Designer support
                // 
                InitializeComponent();
    
                // 
                // TODO: Add any constructor code after InitializeComponent call.
                // 
            }
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            protected override void Dispose( bool disposing )
            {
                if( disposing )
                {
                    if (components != null) 
                    {
                        components.Dispose();
                    }
                }
                base.Dispose( disposing );
            }
    
            #region Windows Form Designer generated code
            /// <summary>
            /// Required method for Designer support: do not modify
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.btnSearch = new System.Windows.Forms.Button();
                this.txtFile = new System.Windows.Forms.TextBox();
                this.lblFile = new System.Windows.Forms.Label();
                this.lblDirectory = new System.Windows.Forms.Label();
                this.lstFilesFound = new System.Windows.Forms.ListBox();
                this.cboDirectory = new System.Windows.Forms.ComboBox();
                this.SuspendLayout();
                // 
                // btnSearch
                // 
                this.btnSearch.Location = new System.Drawing.Point(608, 248);
                this.btnSearch.Name = "btnSearch";
                this.btnSearch.TabIndex = 0;
                this.btnSearch.Text = "Search";
                this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
                // 
                // txtFile
                // 
                this.txtFile.Location = new System.Drawing.Point(8, 40);
                this.txtFile.Name = "txtFile";
                this.txtFile.Size = new System.Drawing.Size(120, 20);
                this.txtFile.TabIndex = 4;
                this.txtFile.Text = "*.dll";
                // 
                // lblFile
                // 
                this.lblFile.Location = new System.Drawing.Point(8, 16);
                this.lblFile.Name = "lblFile";
                this.lblFile.Size = new System.Drawing.Size(144, 16);
                this.lblFile.TabIndex = 5;
                this.lblFile.Text = "Search for files containing:";
                // 
                // lblDirectory
                // 
                this.lblDirectory.Location = new System.Drawing.Point(8, 96);
                this.lblDirectory.Name = "lblDirectory";
                this.lblDirectory.Size = new System.Drawing.Size(120, 23);
                this.lblDirectory.TabIndex = 3;
                this.lblDirectory.Text = "Look In:";
                // 
                // lstFilesFound
                // 
                this.lstFilesFound.Location = new System.Drawing.Point(152, 8);
                this.lstFilesFound.Name = "lstFilesFound";
                this.lstFilesFound.Size = new System.Drawing.Size(528, 225);
                this.lstFilesFound.TabIndex = 1;
                // 
                // cboDirectory
                // 
                this.cboDirectory.DropDownWidth = 112;
                this.cboDirectory.Location = new System.Drawing.Point(8, 128);
                this.cboDirectory.Name = "cboDirectory";
                this.cboDirectory.Size = new System.Drawing.Size(120, 21);
                this.cboDirectory.TabIndex = 2;
                this.cboDirectory.Text = "ComboBox1";
                // 
                // Form1
                // 
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                this.ClientSize = new System.Drawing.Size(688, 277);
                this.Controls.AddRange(new System.Windows.Forms.Control[] {
    
                this.btnSearch,
                this.txtFile,
                this.lblFile,
                this.lblDirectory,
                this.lstFilesFound,
                this.cboDirectory});
    
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
    
            }
            #endregion
    
            /// <summary>
            /// The main entry point for the application
            /// </summary>
            [STAThread]
            static void Main() 
            {
                Application.Run(new Form1());
            }
    
            private void btnSearch_Click(object sender, System.EventArgs e)
            {
                lstFilesFound.Items.Clear();
                txtFile.Enabled = false;
                cboDirectory.Enabled = false;
                btnSearch.Text = "Searching...";
                this.Cursor = Cursors.WaitCursor;
                Application.DoEvents();
                DirSearch(cboDirectory.Text);
                btnSearch.Text = "Search";
                this.Cursor = Cursors.Default;
                txtFile.Enabled = true;
                cboDirectory.Enabled = true;
            }
    
            private void Form1_Load(object sender, System.EventArgs e)
            {
                cboDirectory.Items.Clear();
                foreach (string s in Directory.GetLogicalDrives())
                {
                    cboDirectory.Items.Add(s);
                }
                cboDirectory.Text = "C:\\";
            }
    
            void DirSearch(string sDir) 
            {
                try	
                {
                    foreach (string d in Directory.GetDirectories(sDir)) 
                    {
                        foreach (string f in Directory.GetFiles(d, txtFile.Text)) 
                        {
                            lstFilesFound.Items.Add(f);
                        }
                        DirSearch(d);
                    }
                }
                catch (System.Exception excpt) 
                {
                    Console.WriteLine(excpt.Message);
                }
            }
        }
    }
    Примечание Необходимо изменить код в Visual Studio 2005 и Visual Studio 2008. В версиях Visual Studio, более ранних, чем Visual Studio 2005 C# Добавляет одну форму в проект при создании проекта Windows Forms. Форма называется Form1. В Visual C# 2005 и более поздних версиях двух файлов, представляющих собой форму именами Form1.cs и Form1.designer.cs. Напишите код в файле Form1.cs. Конструктор Windows Forms записывает код в файле Form1.designer.cs.

    Чтобы преобразовать образец кода в Visual C# 2005 или Visual C# 2008, создайте новое приложение Windows Visual C# и затем выполните следующие действия:
    1. Частичный класс Form1 в файле Form1.Designer.cs Скопируйте объект Button , объект текстового поля и других объектов Windows.
    2. Добавьте содержимое в разделе метод InitializeComponent в приведенный выше метод InitializeComponent в файле Form1.Designer.cs. Вставка содержимого после текущего содержимого метода InitializeComponent .
    3. Скопируйте следующие методы из кода выше в класс Form1 в файле Form1.cs:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. Добавьте using System.IO; с помощью инструкции в файле Form1.cs.
    Дополнительные сведения о конструкторе Windows Forms посетите следующий веб-узел Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-us/library/ms173077.aspx
  6. Нажмите клавишу F5 для построения и запуска образца программа.

Ссылки

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
306777Чтение текстового файла с использованием System.IO и C#

Свойства

Код статьи: 303974 - Последний отзыв: 29 марта 2013 г. - Revision: 6.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Ключевые слова: 
kbhowtomaster kbio kbmt KB303974 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: 303974

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com