Makale numarası: 303974 - Son Gözden Geçirme: 28 Ağustos 2007 Salı - Gözden geçirme: 3.5

Özyinelemeli olarak arama dizinleri Visual C# kullanarak nasıl

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Bu makalenin Microsoft Visual C++ .NET sürümü için bkz: 307009  (http://support.microsoft.com/kb/307009/ ) .
Bu makalenin Microsoft Visual Basic .NET sürümü için bkz: 306666  (http://support.microsoft.com/kb/306666/ ) .

Bu makalede, aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanına başvurulmaktadır:
  • System.ıo

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu adım adım makalede gösterir özyinelemeli olarak arama alt dizinlerinde dosyalar C# Windows Forms uygulamasında nasıl. Arama dizesi, arayabilecekleri belirtilen belirli bir genel arama ölçütüne uyan dosyaları. Her kod parçası olarak gereken açıklanmaktadır. Bir <a0>çalışma</a0> kod örneği, makalenin sonunda de sağlanır.

Dizin özyineleme geliştiriciler için ortak bir GÇ görevdir. Bu görevi FileSystemObject Bileşen Nesne Modeli (COM) kolaylaştırır uygulamaları. Artık bu görevin. NET'te daha da kolay hale geldi. FileSystemObject benzer, System.ıo ad alanındaki sınıfların dosyalarına ve dizinlerine erişimi için nesneye yönelik bir yol sağlar.

Gereksinimler

  • Microsoft Visual C# 2005 veya Microsoft Visual C# .NET

Dizin yineleme

Dosya ve dizin düzenleme sınıfları System.ıo ad alanında bulunur. Bu sınıflar ile çalışmak için önce aşağıdaki ad projenize almalısınız:
using System.IO;
System.ıo ad alanı sınıfları bildiren, dosyaları ve dizinleri ile çalışmak pek çok sınıf sağlar. Bu sınıflar, dosya sınıflarını, dizin sınıfları ve yardımcı program sınıfları içerir. Bu sınıfların çoğu bu türde bir değişken bildirmek zorunda kalmadan çağırabileceğiniz statik yöntemler içerir. Örneğin, belirli bir dizinin alt dizinlerinin edinmek için dizin nesnesini kullanabilirsiniz.

Aşağıdaki kod, dize dizisi dönmek için dizin nesnesini statik GetDirectories yöntemini kullanır. Varsa, bu dizinin dizin yolu C dizinin alt dizinlerinin adlarını içerir.
string[] directories = Directory.GetDirectories("C:\\");
dizin nesnesini, belirli bir ölçüte uyan dosyaları bir dize dizisi almanıza olanak veren GetFiles adlı bir yöntem de içerir. Aşağıdaki kod örneği, .dll uzantılıdır C dizinindeki tüm dosyaları almak için Dosya nesnesi kullanır:
string[] files = Directory.GetFiles("C:\\", "*.dll");
için GetDirectories ve GetFilesdizin nesnesinin özyinelemeli olarak arama arama dizesini eşleşen dosyalar için gereken tüm yöntemlerdir. Özyineleme gerçekleştirmek için aşağıdaki yöntemi kullanılır:
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);
	}
}
yukarıdaki kodu, DirSearch için aramak istediğiniz dizini içeren bir dize gönderir. Bu dize değeri dizinin tam yoludur. GetDirectories, geçirilen dizinin alt dizinlerinin yordamınız almak için kullanabilirsiniz. GetDirectories bir dizi verdiğinden, kullanabileceğiniz bir için/her her alt dizinde yineleme yapmak için ifade. Her alt dizinde, dizindeki dosyaların üzerine yineleme yapmak için GetFiles yöntemini kullanın. Formunuzda metin kutusunun değeri için GetFiles geçirilir. Metin kutusunu GetFiles döndürdüğü sonuçlar süzgeçleri arama dizesini içerir. Bunlar, herhangi bir dosya arama ölçütüne uyuyorsa, liste kutunuz eklenir. Bulunan her alt dizinde DirSearch tekrar arayın ve bir alt yönteme. Bu, özyinelemeli aramayı kullanarak, belirli bir kök dizin tüm alt dizinlerinin arayabilirsiniz.

Tam bir kod örneği

  1. Yeni bir Visual C# Windows uygulaması projesi başlatın. Varsayılan olarak, Form1 adlı bir form oluşturulur.
  2. Solution Explorer'ı görüntülemek için Görünüm menüsünde,'ı tıklatın.
  3. Solution Explorer'da (Çözüm Gezgini), Form1 ' ı sağ tıklatın ve Kod Görüntüle</a1>'ı tıklatın.
  4. Form1 kod penceresinde vurgulayın ve varolan tüm kodu silin.
  5. Form1 kod penceresinde aşağıdaki kodu yapıştırın.
    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);
                }
            }
        }
    }
    Not Visual Studio 2005 ve Visual Studio 2008 kodunu değiştirmeniz gerekir. Windows Forms proje oluştururken Visual Studio 2005 ' önceki sürümlerinde Visual Studio, Visual C# bir form projeye ekler. Form1 form olarak adlandırılır. Visual C# 2005 ve sonraki sürümlerde, form temsil eden iki dosya Form1.cs ve Form1.designer.cs olarak adlandırılır. Kodu, Form1.cs dosyasında yazın. Windows Forms Designer kod Form1.designer.cs dosyaya yazar.

    Örnek kod, Visual C# 2005 veya Visual C# 2008 dönüştürmek için <a0></a0>, yeni bir Visual C# Windows uygulaması oluşturun ve sonra aşağıdaki adımları izleyin:
    1. Düğme nesnesi, metin kutusu nesnesi ve diğer Windows nesneleri kısmi sınıfı Form1 Form1.Designer.cs dosyasına kopyalayın.
    2. ınitializecomponent yöntemini bölümün içeriğini kodu Form1.Designer.cs dosyasındaki ınitializecomponent yöntemini ekleyin. Içeriği, ınitializecomponent yöntemini sonra geçerli içeriğini yapıştırın.
    3. Aşağıdaki yöntemlerden kodlardan Form1 sınıfı Form1.cs dosyasına kopyalayın:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. Form1.cs dosyaya deyimini kullanarak System.ıo; kullanarak ekleyin.
    Windows Forms Tasarımcısı hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx (http://msdn2.microsoft.com/en-us/library/ms173077.aspx)
  6. Oluşturmak ve örnek program çalıştırmak için F5 tuşuna basın.

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
306777  (http://support.microsoft.com/kb/306777/ ) Nasıl yapılır: System.ıo ve Visual C# kullanarak bir metin dosyası okunamıyor.
Visual C# .NET hakkında genel bilgi için aşağıdaki Usenet haber grubuna bakın:
microsoft.public.dotnet.languages.csharp (http://go.microsoft.com/fwlink/?linkid=5217)

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Anahtar Kelimeler: 
kbmt kbhowtomaster kbio KB303974 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:303974  (http://support.microsoft.com/kb/303974/en-us/ )