Utiliser Visual C# pour effectuer les e/s de fichier de base

Cet article explique comment effectuer une e/s de fichier de base dans Visual C# et fournit un exemple de code pour illustrer cette tâche.

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

Résumé

Notes

Cet article décrit étape par étape comment effectuer six opérations d’entrée/sortie (e/s) de fichier en Visual C#. Si vous débutez dans .NET Framework, le modèle objet pour les opérations de fichiers dans .NET est semblable au FileSystemObject (FSO) qui est populaire avec de nombreux développeurs Visual Studio 6,0. Pour faciliter la transition, la fonctionnalité illustrée dans utilisation de FileSystemObject avec Visual Basic.

Vous pouvez toujours utiliser le FileSystemObject dans .net. Étant donné qu’il FileSystemObject s’agit d’un composant COM (Component Object Model), .net exige que l’accès à l’objet se fasse via la couche d’interopérabilité. Microsoft .NET génère un wrapper pour le composant pour vous si vous souhaitez l’utiliser. Toutefois, les classes,,, File FileInfo Directory DirectoryInfo et autres classes associées de .NET Framework offrent des fonctionnalités qui ne sont pas disponibles avec le FSO, sans la charge de la couche d’interopérabilité.

Opérations d’e/s de fichier démontré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 illustrant les opérations d’e/s de fichier suivantes :

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

Si vous souhaitez utiliser les exemples de code suivants directement, tenez compte des points suivants :

  • Incluez l' System.IO espace 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 l’instruction suivante directement :

    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 plusieurs façons de déterminer si 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 disposez d’un fichier existant, vous pouvez l’ouvrir de la même manière.

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 sur le 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 Directory les Drive classes et 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 nombreuses choses peuvent être incorrectes lorsqu’un utilisateur accède à des fichiers. Il se peut que les fichiers n’existent pas, que les fichiers soient en cours d’utilisation ou que les utilisateurs ne disposent pas des droits sur les fichiers ou les dossiers auxquels ils tentent d’accéder. Il est important d’envisager ces possibilités lors de l’écriture de code et de la gestion des exceptions qui peuvent être générées.

Exemple de procédure 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 de l' éditeur code-behind .

    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 Concepteur Windows Forms écrit le code généré par le concepteur dans le fichier Form1.Designer.cs . Le code dans les étapes précédentes reflète cette organisation.

  9. Appuyez sur F5 pour générer et exécuter le programme. Cliquez sur les boutons pour afficher les différentes actions. Lorsque vous affichez l’exemple de code, vous souhaiterez peut-être réduire la zone nommée code généré par le concepteur de formulaires Windows pour masquer ce code.