Usare Visual C# per eseguire operazioni di I/O di file di base

Questo articolo descrive come eseguire operazioni di I/O di file di base in Visual C# e fornisce un esempio di codice per illustrare come eseguire questa attività.

Versione originale del prodotto: Oggetto visivo C#
Numero KB originale: 304430

Riepilogo

Nota

Questo articolo dettagliato illustra come eseguire sei operazioni di input/output di file di base (I/O) in Visual C#. Se non si ha esperienza con .NET Framework, si scoprirà che il modello a oggetti per le operazioni sui file in .NET è simile a FileSystemObject quello (FSO) molto diffuso tra molti sviluppatori di Visual Studio 6.0. Per semplificare la transizione, la funzionalità illustrata in Come usare FileSystemObject con Visual Basic.

È comunque possibile usare in FileSystemObject .NET. FileSystemObject Poiché è un componente COM (Component Object Model), .NET richiede che l'accesso all'oggetto sia tramite il livello Interop. Microsoft .NET genera automaticamente un wrapper per il componente se si vuole usarlo. Tuttavia, le Fileclassi , FileInfo, Directory, DirectoryInfo e altre classi correlate in .NET Framework offrono funzionalità non disponibili con FSO, senza il sovraccarico del livello Interop.

Operazioni di I/O di file illustrate

Gli esempi in questo articolo descrivono le operazioni di I/O dei file di base. La sezione di esempio dettagliata descrive come creare un programma di esempio che illustra le operazioni di I/O dei file seguenti:

  • Leggere un file di testo
  • Scrivere un file di testo
  • Visualizzare le informazioni sui file
  • Elencare le unità disco
  • Elencare le cartelle
  • Elencare i file

Se si vogliono usare direttamente gli esempi di codice seguenti, tenere presente quanto segue:

  • Includere lo spazio dei System.IO nomi, come indicato di seguito:

    using System.IO;
    
  • Dichiarare la winDir variabile come segue:

    string winDir=System.Environment.GetEnvironmentVariable("windir");
    
  • La addListItem funzione viene dichiarata come segue:

    private void addListItem(string value)
    {
        this.listBox1.Items.Add(value);
    }
    

    Anziché dichiarare e usare la addListItem funzione , è possibile usare direttamente l'istruzione seguente:

    this.listBox1.Items.Add(value);
    

Leggere un file di testo

Il codice di esempio seguente usa una StreamReader classe per leggere il file System.ini . Il contenuto del file viene aggiunto a un controllo ListBox. Il try...catch blocco viene usato per avvisare il programma se il file è vuoto. Esistono molti modi per determinare quando viene raggiunta la fine del file; questo esempio usa il Peek metodo per esaminare la riga successiva prima di leggerla.

StreamReader reader=new StreamReader(winDir + "\\system.ini");
try
{
    do
    {
        addListItem(reader.ReadLine());
    }
    while(reader.Peek()!= -1);
}
catch
{
    addListItem("File is empty");
}
finally
{
    reader.Close();
}

Scrivere un file di testo

Questo codice di esempio usa una StreamWriter classe per creare e scrivere in un file. Se si dispone di un file esistente, è possibile aprirlo nello stesso modo.

StreamWriter writer = new StreamWriter("c:\\KBTest.txt");
writer.WriteLine("File created using StreamWriter class.");
writer.Close();
this.listbox1.Items.Clear();
addListItem("File Written to C:\\KBTest.txt");

Visualizzare le informazioni sui file

Questo codice di esempio usa un FileInfo oggetto per accedere alle proprietà di un file. Notepad.exe viene usato in questo esempio. Le proprietà vengono visualizzate in un controllo ListBox.

FileInfo FileProps =new FileInfo(winDir + "\\notepad.exe");
addListItem("File Name = " + FileProps.FullName);
addListItem("Creation Time = " + FileProps.CreationTime);
addListItem("Last Access Time = " + FileProps.LastAccessTime);
addListItem("Last Write TIme = " + FileProps.LastWriteTime);
addListItem("Size = " + FileProps.Length);
FileProps = null;

Elencare le unità disco

Questo codice di esempio usa le Directory classi e Drive per elencare le unità logiche in un sistema. Per questo esempio, i risultati vengono visualizzati in un controllo ListBox.

string[] drives = Directory.GetLogicalDrives();
foreach(string drive in drives)
{
    addListItem(drive);
}

Elencare le sottocartelle

Questo codice di esempio usa il GetDirectories metodo della Directory classe per ottenere un elenco di cartelle.

string[] dirs = Directory.GetDirectories(winDir);
foreach(string dir in dirs)
{
    addListItem(dir);
}

Elencare i file

Questo codice di esempio usa il GetFiles metodo della Directory classe per ottenere un elenco di file.

string[] files= Directory.GetFiles(winDir);
foreach (string i in files)
{
    addListItem(i);
}

Molte cose possono andare male quando un utente ottiene l'accesso ai file. I file potrebbero non esistere, i file potrebbero essere in uso o gli utenti potrebbero non avere diritti sui file o sulle cartelle a cui stanno tentando di accedere. È importante considerare queste possibilità quando si scrive codice e si gestiscono le eccezioni che possono essere generate.

Esempio dettagliato

  1. In Visual C# creare una nuova applicazione Windows Forms. Per impostazione predefinita, viene creato Form1 .

  2. Aprire la finestra del codice per Form1 (Form1.cs).

  3. Eliminare tutto il codice nel Form1.cs.

  4. Incollare il codice seguente nella finestra code-behind Editor.

    using System.Windows.Forms;
    using System.IO;
    
    namespace fso_cs
    {
        public partial class Form1 : Form
        {
            string winDir = System.Environment.GetEnvironmentVariable("windir");
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, System.EventArgs e)
            {
                //How to read a text file.
                //try...catch is to deal with a 0 byte file.
                this.listBox1.Items.Clear();
                StreamReader reader = new StreamReader(winDir + "\\system.ini");
                try
                {
                    do
                    {
                        addListItem(reader.ReadLine());
                    }
                    while (reader.Peek()!= -1);
                }
                catch
                {
                    addListItem("File is empty");
                }
                finally
                {
                    reader.Close();
                }
            }
    
            private void button2_Click(object sender, System.EventArgs e)
            {
                //Demonstrates how to create and write to a text file.
                StreamWriter writer = new StreamWriter("c:\\KBTest.txt");
                writer.WriteLine("File created using StreamWriter class.");
                writer.Close();
                this.listBox1.Items.Clear();
                addListItem("File Written to C:\\KBTest.txt");
            }
    
            private void button3_Click(object sender, System.EventArgs e)
            {
                //How to retrieve file properties (example uses Notepad.exe).
                this.listBox1.Items.Clear();
                FileInfo FileProps = new FileInfo(winDir + "\\notepad.exe");
                addListItem("File Name = " + FileProps.FullName);
                addListItem("Creation Time = " + FileProps.CreationTime);
                addListItem("Last Access Time = " + FileProps.LastAccessTime);
                addListItem("Last Write TIme = " + FileProps.LastWriteTime);
                addListItem("Size = " + FileProps.Length);
                FileProps = null;
            }
    
            private void button4_Click(object sender, System.EventArgs e)
            {
                //Demonstrates how to obtain a list of disk drives.
                this.listBox1.Items.Clear();
                string[] drives = Directory.GetLogicalDrives();
                foreach (string drive in drives)
                {
                    addListItem(drive);
                }
            }
    
            private void button5_Click(object sender, System.EventArgs e)
            {
                //How to get a list of folders (example uses Windows folder). 
                this.listBox1.Items.Clear();
                string[] dirs = Directory.GetDirectories(winDir);
                foreach (string dir in dirs)
                {
                    addListItem(dir);
                }
            }
    
            private void button6_Click(object sender, System.EventArgs e)
            {
                //How to obtain list of files (example uses Windows folder).
                this.listBox1.Items.Clear();
                string[] files = Directory.GetFiles(winDir);
                foreach (string i in files)
                {
                    addListItem(i);
                }
            }
    
            private void Form1_Load(object sender, System.EventArgs e)
            {
                this.button1.Text = "Read Text File";
                this.button2.Text = "Write Text File";
                this.button3.Text = "View File Information";
                this.button4.Text = "List Drives";
                this.button5.Text = "List Subfolders";
                this.button6.Text = "List Files";
            }
    
            private void addListItem(string value)
            {
                this.listBox1.Items.Add(value);
            }
        }
    }
    
  5. Aprire la finestra del codice per Form1.Designer. cs.

  6. Eliminare tutto il codice in Form1.Designer. cs.

  7. Incollare il codice seguente in Form1.Designer. cs.

    namespace fso_cs
    {
        partial class Form1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (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.button1 = new System.Windows.Forms.Button();
                this.button2 = new System.Windows.Forms.Button();
                this.button3 = new System.Windows.Forms.Button();
                this.button4 = new System.Windows.Forms.Button();
                this.button5 = new System.Windows.Forms.Button();
                this.button6 = new System.Windows.Forms.Button();
                this.listBox1 = new System.Windows.Forms.ListBox();
                this.SuspendLayout();
    
                // button1
                this.button1.Location = new System.Drawing.Point(53, 30);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(112, 23);
                this.button1.TabIndex = 1;
                this.button1.Text = "button1";
                this.button1.Click += new System.EventHandler(this.button1_Click);
    
                // button2
                this.button2.Location = new System.Drawing.Point(53, 62);
                this.button2.Name = "button2";
                this.button2.Size = new System.Drawing.Size(112, 23);
                this.button2.TabIndex = 2;
                this.button2.Text = "button2";
                this.button2.Click += new System.EventHandler(this.button2_Click);
    
                // button3
                this.button3.Location = new System.Drawing.Point(53, 94);
                this.button3.Name = "button3";
                this.button3.Size = new System.Drawing.Size(112, 23);
                this.button3.TabIndex = 3;
                this.button3.Text = "button3";
                this.button3.Click += new System.EventHandler(this.button3_Click);
    
                // button4
                this.button4.Location = new System.Drawing.Point(53, 126);
                this.button4.Name = "button4";
                this.button4.Size = new System.Drawing.Size(112, 23);
                this.button4.TabIndex = 4;
                this.button4.Text = "button4";
                this.button4.Click += new System.EventHandler(this.button4_Click);
    
                // button5
                this.button5.Location = new System.Drawing.Point(53, 158);
                this.button5.Name = "button5";
                this.button5.Size = new System.Drawing.Size(112, 23);
                this.button5.TabIndex = 5;
                this.button5.Text = "button5";
                this.button5.Click += new System.EventHandler(this.button5_Click);
    
                // button6
                this.button6.Location = new System.Drawing.Point(53, 190);
                this.button6.Name = "button6";
                this.button6.Size = new System.Drawing.Size(112, 23);
                this.button6.TabIndex = 6;
                this.button6.Text = "button6";
                this.button6.Click += new System.EventHandler(this.button6_Click);
    
                // listBox1
                this.listBox1.FormattingEnabled = true;
                this.listBox1.Location = new System.Drawing.Point(204, 30);
                this.listBox1.Name = "listBox1";
                this.listBox1.Size = new System.Drawing.Size(270, 199);
                this.listBox1.TabIndex = 7;
    
                // Form1
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                this.ClientSize = new System.Drawing.Size(525, 273);
                this.Controls.Add(this.button6);
                this.Controls.Add(this.button5);
                this.Controls.Add(this.button4);
                this.Controls.Add(this.button3);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Controls.Add(this.listBox1);
                this.Name = "Form1";
                this.Text = "Form1";
                this.Load += new System.EventHandler(this.Form1_Load);
                this.ResumeLayout(false);
            }
            #endregion
    
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.Button button3;
            private System.Windows.Forms.Button button4;
            private System.Windows.Forms.Button button5;
            private System.Windows.Forms.Button button6;
            private System.Windows.Forms.ListBox listBox1;
        }
    }
    
  8. Per impostazione predefinita, Visual C# aggiunge una maschera al progetto quando si crea un progetto Windows Forms. Questo modulo è denominato Form1. I due file di codice sorgente che rappresentano il modulo sono denominati Form1.cs e Form1.Designer. cs. Il codice viene scritto nel file Form1.cs . Il Windows Forms Designer scrive il codice generato dalla finestra di progettazione in Form1.Designer. file cs. Il codice nei passaggi precedenti riflette tale organizzazione.

  9. Premere F5 per compilare ed eseguire il programma. Fare clic sui pulsanti per visualizzare le diverse azioni. Quando si visualizza il codice di esempio, è possibile comprimere l'area denominata Windows Form Designer Codice generato per nascondere il codice.