Visual C# kullanarak yinelemeli arama dizinleri nasıl

Bu makalenin Microsoft Visual C++ .NET sürümü için bkz: 307009 .

Bu makalenin Microsoft Visual Basic .NET sürümü için bkz: 306666 .


Bu makalede aşağıdaki Microsoft .NET Framework sınıf kitaplığı ad alanına başvurur:
  • System.IO

Özet

Bu adım adım makalede gösterir nasıl bir C# Windows Forms uygulamasında dosyaları için yinelemeli arama alt dizinler. Arama dizesi belirtilen arama yapabilmesi için belirli bir joker ölçütlere uyan dosyaları. Her kod parçası, gerektiğinde açıklanmıştır. Çalışma örnek kod, makalenin sonunda de sağlanır.

Dizin yineleme, geliştiriciler için ortak bir GÇ görevdir. FileSystemObject bu görevi Bileşen Nesne Modeli (COM) uygulamalarını kolaylaştırır. Şimdi bu görevin .NET ile daha kolay hale geldi. System.IO ad alanındaki sınıflar FileSystemObjectbenzeyen, dosyaları ve dizinleri erişmek için nesne yönelimli bir yol sağlar.

Gereksinimleri

  • Microsoft Visual C# 2005 ya da Microsoft Visual C# .NET

Dizin Yineleme

Dosya ve dizin işleme sınıfları System.IO ad alanında bulunur. Bu sınıflar ile çalışma önce projenize aşağıdaki ad almanız gerekir:
using System.IO;
System.IO ad alanı sınıfları, dosyaları ve dizinleri ile çalışmanıza olanak sağlayan birçok sınıf sağlar. Bu sınıflar, dosya sınıfları, 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ğırabilirsiniz statik yöntemler içerir. Örneğin, belirli bir dizinin alt dizinleri almak için dizin nesnesini kullanabilirsiniz.

Aşağıdaki kod statik GetDirectories yöntemini dizin nesnesinin dizelerden oluşan bir dizi döndürmek için kullanır. Bu dizi varsa C dizinin alt dizinleri için dizin yol adlarını içerir.
string[] directories = Directory.GetDirectories("C:\\");
Dizin nesnesi, belirli bir ölçüte uyan dosyaları bir dize dizisi almak sağlar GetFiles adlı bir yöntemi de içerir. Aşağıdaki kod örneği, Dosya nesnesi .dll uzantılıdır C dizinindeki tüm dosyaları almak için kullanır:
string[] files = Directory.GetFiles("C:\\", "*.dll");
GetDirectories ve GetFiles dizin nesnesinin tüm yinelemeli arama dizesiyle eşleşen dosyaları aramak için gereken yöntemlerdir. Aşağıdaki yöntem, özyineleme gerçekleştirmek için 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 kod, DirSearchiçin arama yapmak istediğiniz dizini içeren bir dize gönderir. Bu dize değeri dizininin tam yoludur. Geçirilen dizininin alt dizinleri yordamınız almak için GetDirectories kullanabilirsiniz. GetDirectories bir dizi verdiğinden, kullanabileceğiniz bir için/each her alt dizinde yineleme ifadesi. Her alt dizinde GetFiles yöntem dizindeki dosyalar üzerinde yinelemek için kullanın. GetFilesiçin formunuzdaki metin kutusunun değeri geçirilir. Metin kutusunu GetFiles döndürür sonuçlar filtreleri arama dizesini içerir. Herhangi bir dosya arama kriterleriyle eşleşmesi varsa, bunlar, liste kutusuna eklenir. Bulunan her alt dizin DirSearch tekrar çağırın ve bir alt geçirin. Bu özyinelemeli aramayı kullanarak, verilen kök dizininin tüm alt dizinlerde arama yapabilirsiniz.

Tam kod örneği

  1. Yeni bir Visual C# Windows application 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 Form1' i sağ tıklatın ve Kod Görüntüle'yitıklatın.
  4. Form1 kod penceresinde vurgulayın ve sonra varolan tüm kodu silin.
  5. Form1 kod penceresine 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 2008 ve Visual Studio 2005'te kodu değiştirmeniz gerekir. Bir Windows Forms projesi oluşturduğunuzda, Visual Studio 2005 ' önceki sürümlerinde Visual Studio, Visual C# bir form projeye ekler. Form1 formu olarak adlandırılır. Visual C# 2005 ve sonraki sürümleri, formu temsil eden iki dosyayı Form1.cs ve Form1.designer.cs olarak adlandırılır. Form1.cs dosyasýna kod yazacaksınız. Windows Form Tasarımcısı içinde Form1.designer.cs dosyasýndaki kod yazar.

    Visual C# 2005 veya Visual C# 2008 örnek koda dönüştürmek için yeni bir Visual C# Windows uygulaması oluşturun ve sonra aşağıdaki adımları izleyin:
    1. Form1.Designer.cs dosyasýndaki parçalı sınıfta Form1 düğmesini nesne, metin kutusu nesnesi ve diğer Windows nesneleri kopyalayın.
    2. InitializeComponent yöntemi bölümün içeriğini Form1.Designer.cs dosyasýndaki InitializeComponent yöntemine yukarıdaki kodu ekleyin. InitializeComponent yöntemi geçerli içeriğini sonra içeriği yapıştırın.
    3. Form1.cs dosyasýný Form1 sınıfının içine yukarıdaki kodu aşağıdaki yöntemlerden kopyalayın:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. Using ifadesi Form1.cs dosyasını System.IO; kullanarak ekleyin.
    Windows Form Tasarımcısı hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
  6. Yapı ve örnek program çalıştırmak için F5 tuşuna basın.

Başvurular

Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasına tıklayın:

306777 nasıl System.IO ve Visual C# kullanarak bir metin dosyası okuma

Özellikler

Makale No: 303974 - Son İnceleme: 24 Şub 2017 - Düzeltme: 1

Microsoft Visual C# 2005, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2008 Express Edition

Geri bildirim