Utiliser Visual C# pour effectuer des E/S de fichier de base

Cet article explique comment effectuer des E/S de fichier de base dans Visual C#, et fournit un exemple de code pour illustrer comment effectuer cette tâche.

Version d’origine du produit : Visual C#
Numéro de la base de connaissances d’origine : 304430

Résumé

Remarque

Cet article pas à pas vous montre comment effectuer six opérations d’entrée/sortie de fichier de base dans Visual C#. Si vous débutez avec le .NET Framework, vous constaterez que le modèle objet pour les opérations de fichier dans .NET est similaire à l’authentification FileSystemObject (FSO) qui est populaire auprès de nombreux développeurs Visual Studio 6.0. Pour faciliter la transition, utilisez les fonctionnalités présentées dans Comment utiliser FileSystemObject avec Visual Basic.

Vous pouvez toujours utiliser dans FileSystemObject .NET. Étant donné que le FileSystemObject est un composant COM (Component Object Model), .NET exige que l’accès à l’objet passe par la couche d’interopérabilité. Microsoft .NET génère un wrapper pour le composant pour vous si vous souhaitez l’utiliser. Toutefois, les Fileclasses , FileInfo, DirectoryInfoDirectory, et d’autres classes associées dans le .NET Framework offrent des fonctionnalités qui ne sont pas disponibles avec l’authentification FSO, sans la surcharge de la couche interopérabilité.

Opérations d’E/S de fichier illustrées

Les exemples de cet article décrivent les opérations d’E/S de fichier de base. La section Exemple pas à pas décrit comment créer un exemple de programme qui illustre les opérations d’E/S de fichier suivantes :

  • Lire un fichier texte
  • Écrire un fichier texte
  • Afficher les informations du fichier
  • Répertorier les lecteurs de disque
  • Répertorier les dossiers
  • Répertorier les fichiers

Si vous souhaitez utiliser directement les exemples de code suivants, tenez compte des éléments suivants :

  • Incluez l’espace System.IO de noms, comme suit :

    using System.IO;
    
  • Déclarez la winDir variable comme suit :

    string winDir=System.Environment.GetEnvironmentVariable("windir");
    
  • La addListItem fonction est déclarée comme suit :

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

    Au lieu de déclarer et d’utiliser la addListItem fonction, vous pouvez utiliser directement l’instruction suivante :

    this.listBox1.Items.Add(value);
    

Lire un fichier texte

L’exemple de code suivant utilise une StreamReader classe pour lire le fichier System.ini . Le contenu du fichier est ajouté à un contrôle ListBox. Le try...catch bloc est utilisé pour alerter le programme si le fichier est vide. Il existe de nombreuses façons de déterminer quand la fin du fichier est atteinte ; cet exemple utilise la Peek méthode pour examiner la ligne suivante avant de la lire.

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

Écrire un fichier texte

Cet exemple de code utilise une StreamWriter classe pour créer et écrire dans un fichier. Si vous avez un fichier existant, vous pouvez l’ouvrir de la même façon.

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");

Afficher les informations du fichier

Cet exemple de code utilise un FileInfo objet pour accéder aux propriétés d’un fichier. Notepad.exe est utilisé dans cet exemple. Les propriétés apparaissent dans un contrôle 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;

Répertorier les lecteurs de disque

Cet exemple de code utilise les Directory classes et Drive pour répertorier les lecteurs logiques sur un système. Pour cet exemple, les résultats s’affichent dans un contrôle ListBox.

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

Répertorier les sous-dossiers

Cet exemple de code utilise la GetDirectories méthode de la Directory classe pour obtenir une liste de dossiers.

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

Répertorier les fichiers

Cet exemple de code utilise la GetFiles méthode de la Directory classe pour obtenir une liste de fichiers.

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

De nombreux problèmes peuvent se présenter lorsqu’un utilisateur accède à des fichiers. Il se peut que les fichiers n’existent pas, qu’ils soient en cours d’utilisation ou que les utilisateurs ne disposent pas de droits sur les fichiers ou dossiers auxquels ils tentent d’accéder. Il est important de prendre en compte ces possibilités lorsque vous écrivez du code et de gérer les exceptions qui peuvent être générées.

Exemple pas à pas

  1. Dans Visual C#, créez une application Windows Forms. Par défaut, Form1 est créé.

  2. Ouvrez la fenêtre de code pour Form1 (Form1.cs).

  3. Supprimez tout le code dans le Form1.cs.

  4. Collez le code suivant dans la fenêtre Code-Behind Rédacteur.

    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. Ouvrez la fenêtre de code pour Form1.Designer. cs.

  6. Supprimez tout le code dans Form1.Designer. cs.

  7. Collez le code suivant dans 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. Par défaut, Visual C# ajoute un formulaire au projet lorsque vous créez un projet Windows Forms. Ce formulaire est nommé Form1. Les deux fichiers de code source qui représentent le formulaire sont nommés Form1.cs et Form1.Designer. cs. Vous écrivez votre code dans le fichier Form1.cs . Le Windows Forms Designer écrit le code généré par le concepteur dans form1.Designer. fichier cs. Le code des étapes précédentes reflète cette organization.

  9. Appuyez sur F5 pour générer, puis exécutez le programme. Cliquez sur les boutons pour afficher les différentes actions. Lorsque vous affichez l’exemple de code, vous pouvez réduire la zone nommée Windows Form Designer Code généré pour masquer ce code.