Πώς να αναδρομικά καταλόγους αναζήτησης χρησιμοποιώντας το Visual C#

Για μια έκδοση του Microsoft Visual C++ .NET αυτού του άρθρου, ανατρέξτε στην ενότητα 307009 .

Για την Microsoft Visual Basic .NET έκδοση αυτού του άρθρου, ανατρέξτε στην ενότητα 306666 .


Αυτό το άρθρο αναφέρεται από τον ακόλουθο χώρο ονομάτων βιβλιοθήκη κλάσης του Microsoft .NET Framework:
  • System.IO

Σύνοψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο αναδρομικά υποκαταλόγους αναζήτησης για αρχεία σε μια εφαρμογή C# φόρμες των Windows. Έχει καθοριστεί μια συμβολοσειρά αναζήτησης, ώστε να μπορείτε να κάνετε αναζήτηση για αρχεία που συμφωνούν με ορισμένα κριτήρια μπαλαντέρ. Κάθε τμήμα του κώδικα εξηγείται ανάλογα με τις ανάγκες. Δείγμα κώδικα εργασίας παρέχονται επίσης στο τέλος του άρθρου.

Αναδρομή καταλόγου είναι μια κοινή εργασία εισόδου/ΕΞΌΔΟΥ για προγραμματιστές. Το FileSystemObject εύκολα αυτήν την εργασία για εφαρμογές μοντέλου αντικειμένου στοιχείου (COM). Τώρα, αυτή η εργασία έχει γίνει ακόμα πιο εύκολη στο .NET. Παρόμοιο με το FileSystemObject, τις κλάσεις στο χώρο ονομάτων System.IO σας παρέχουν έναν τρόπο με προσανατολισμό στο αντικείμενο για να αποκτήσετε πρόσβαση σε αρχεία και καταλόγους.

Απαιτήσεις

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

Αναδρομή καταλόγου

Οι κατηγορίες χειραγώγηση αρχείων και καταλόγων που βρίσκονται στο χώρο ονομάτων System.IO . Για να εργαστείτε με αυτές τις κλάσεις, θα πρέπει να εισαγάγετε τον ακόλουθο χώρο ονομάτων στο έργο σας:
using System.IO;
Οι κλάσεις χώρου ονομάτων System.IO παρέχουν πολλές κλάσεις που σας επιτρέπουν να εργαστείτε με αρχεία και καταλόγους. Αυτές οι κλάσεις περιλαμβάνουν αρχείο κλάσεις, κλάσεις καταλόγου και βοηθητικού προγράμματος κλάσεις. Πολλές από αυτές τις κλάσεις περιέχει στατικές μεθόδους που μπορείτε να καλέσετε χωρίς να χρειάζεται να δηλώσετε μια μεταβλητή αυτού του τύπου. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το αντικείμενο καταλόγου για να αποκτήσετε υποκαταλόγων του έναν καθορισμένο κατάλογο.

Ο κώδικας που ακολουθεί χρησιμοποιεί τη στατική μέθοδο GetDirectories του αντικειμένου καταλόγου για να επιστρέφουν έναν πίνακα συμβολοσειρών. Αυτός ο πίνακας περιλαμβάνει ονόματα διαδρομή καταλόγου για το τους υποκαταλόγους του καταλόγου C, αν υπάρχει.
string[] directories = Directory.GetDirectories("C:\\");
Το αντικείμενο καταλόγου περιέχει επίσης μια μέθοδο που ονομάζεται GetFiles , που σας επιτρέπει να ανακτήσετε μια συμβολοσειρά πίνακα αρχείων που συμφωνούν με ορισμένα κριτήρια. Το ακόλουθο δείγμα κώδικα χρησιμοποιεί το αντικείμενο αρχείου για να ανακτήσετε όλα τα αρχεία στον κατάλογο C που τελειώνουν με την επέκταση .dll:
string[] files = Directory.GetFiles("C:\\", "*.dll");
Οι μέθοδοι GetDirectories και GetFiles του αντικειμένου καταλόγου είναι το μόνο που χρειάζεστε για την αναζήτηση αρχείων που ταιριάζουν με τη συμβολοσειρά αναζήτησης αναδρομικά. Η ακόλουθη μέθοδος χρησιμοποιείται για την εκτέλεση της αναδρομή:
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. Ξεκινήστε ένα νέο έργο της Visual C# Windows εφαρμογή. Από προεπιλογή, δημιουργείται μια φόρμα που ονομάζεται 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, Visual C# προσθέτει μία φόρμα για το έργο όταν δημιουργείτε ένα έργο Windows φόρμες. Η φόρμα ονομάζεται Form1. Στη Visual C# 2005 και σε νεότερες εκδόσεις, τα δύο αρχεία που αντιπροσωπεύει τη φόρμα ονομάζονται Form1.cs και Form1.designer.cs. Μπορείτε να συντάξετε κώδικα στο αρχείο Form1.cs. Η σχεδίαση φορμών Windows εγγράφει κώδικα στο αρχείο Form1.designer.cs.

    Για να μετατρέψετε το δείγμα κώδικα Visual C# 2005 ή Visual C# 2008, δημιουργήστε μια νέα εφαρμογή Visual C# Windows και, στη συνέχεια, ακολουθήστε τα εξής βήματα:
    1. Αντιγράψτε το αντικείμενο κουμπί , το αντικείμενο του πλαισίου κειμένου και άλλα αντικείμενα των Windows μερικής κλάσης Form1 στο αρχείο Form1.Designer.cs.
    2. Προσθέστε το περιεχόμενο της ενότητας μέθοδος InitializeComponent στον κώδικα πάνω από τη μέθοδο InitializeComponent στο αρχείο Form1.Designer.cs. Επικόλληση των περιεχομένων μετά τα τρέχοντα περιεχόμενα του τη μέθοδο InitializeComponent .
    3. Αντιγράψτε τις ακόλουθες μεθόδους από τον κώδικα του παραπάνω στο της κλάσης Form1 στο αρχείο Form1.cs:
      • btnSearch_Click
      • Form1_Load
      • DirSearch
    4. Για να προσθέσετε ένα χρησιμοποιώντας System.IO, χρησιμοποιώντας την εντολή στο αρχείο Form1.cs.
    Για περισσότερες πληροφορίες σχετικά με τη σχεδίαση φορμών Windows, επισκεφθείτε την ακόλουθη τοποθεσία του Microsoft Developer Network (MSDN) στο Web:
  6. Πατήστε F5 για να δημιουργήσετε και να εκτελέσετε το δείγμα προγράμματος.

Αναφορές

Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

306777 Τρόπος ανάγνωσης ενός αρχείου κειμένου, χρησιμοποιώντας System.IO και Visual C#

Ιδιότητες

Αναγνωριστικό άρθρου: 303974 - Τελευταία αναθεώρηση: 21 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια