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

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 303974 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Για την έκδοση Microsoft Visual C++ .NET αυτού του άρθρου, ανατρέξτε στο θέμα 307009.
Για την έκδοση Microsoft Visual Basic .NET αυτού του άρθρου, ανατρέξτε στο θέμα 306666.

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

Σε αυτήν τη σελίδα

Περίληψη

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

Κατάλογος αναδρομή είναι μια κοινή εργασία εισόδου/ΕΞΌΔΟΥ για προγραμματιστές. Το FileSystemObject διευκολύνει αυτήν την εργασία για τις υπηρεσίες Component Object Model (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 Forms. Η φόρμα ονομάζεται 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:
    http://msdn2.Microsoft.com/en-us/library/ms173077.aspx
  6. Πιέστε το πλήκτρο F5 για να δημιουργήσετε και να εκτελέσετε το δείγμα πρόγραμμα.

Αναφορές

Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω για να προβάλετε το άρθρο της Γνωσιακής βάσης της Microsoft:
306777Τρόπος ανάγνωσης ενός αρχείου κειμένου, χρησιμοποιώντας System.IO και Visual C#

Ιδιότητες

Αναγν. άρθρου: 303974 - Τελευταία αναθεώρηση: Πέμπτη, 30 Μαΐου 2013 - Αναθεώρηση: 5.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Λέξεις-κλειδιά: 
kbhowtomaster kbio kbmt KB303974 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: 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