Cómo realizar operaciones básicas de E/S de archivos en Visual C#

Seleccione idioma Seleccione idioma
Id. de artículo: 304430 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E304430
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso se muestra cómo realizar seis operaciones de entrada y salida (E/S) básicas de archivos en Microsoft Visual C# 2005 o en Microsoft Visual C# .NET. Si no ha utilizado nunca Microsoft .NET Framework, observará que el modelo de objetos para las operaciones de archivos en .NET es muy similar a FileSystemObject (FSO), conocido entre un gran número de programadores de Visual Studio 6.0. En un esfuerzo por facilitar la transición, la funcionalidad que se demuestra en este artículo se basa en el siguiente artículo de Microsoft Knowledge Base:
186118 Cómo utilizar FileSystemObject con Visual Basic
Todavía es posible utilizar FileSystemObject en .NET. Puesto que FileSystemObject es un componente del Modelo de objetos componentes (COM), .NET requiere que el acceso al objeto se realice a través de la capa de interoperabilidad. .NET genera un contenedor para el componente si desea utilizarlo. Sin embargo, las clases File, FileInfo, Directory y DirectoryInfo, así como otras clases relacionadas de .NET Framework, ofrecen una funcionalidad que no está disponible con el FSO sin la sobrecarga que supone la capa de interoperabilidad.

Requisitos

En la lista siguiente se indican el hardware, el software, la infraestructura de red y los Service Pack recomendados que necesitará:
  • Visual C# 2005 o Visual C# .NET

Operaciones de E/S de archivos demostradas

En los ejemplos incluidos en este artículo se describen operaciones básicas de E/S de archivo. En la sección "Ejemplo paso a paso" se describe cómo crear un programa de ejemplo que demuestra las siguientes operaciones de E/S de archivos:
  • Leer un archivo de texto
  • Escribir en un archivo de texto
  • Ver información de un archivo
  • Enumerar unidades de disco
  • Enumerar carpetas
  • Enumerar archivos
Nota
Si desea utilizar directamente los ejemplos de código siguientes, tenga en cuenta lo siguiente:
  • Debe incluir el espacio de nombres System.IO del siguiente modo:
    using System.IO;
    					
  • La variable winDir debe declararse de la manera siguiente:
    string    winDir=System.Environment.GetEnvironmentVariable("windir");
    					
  • La función addListItem debe declararse del siguiente modo:
    private void addListItem(string value) { this.listbox1.Items.Add(value); }
    					
    Nota
    En lugar de declarar y utilizar la función addListItem, puede utilizar directamente la instrucción siguiente:
    this.listbox1.Items.Add(value);"
    					

Leer un archivo de texto

En el ejemplo de código siguiente se utiliza una clase StreamReader para leer el archivo System.ini. El contenido del archivo se agrega a un control ListBox. El bloque try...catch se utiliza para avisar al programa si el archivo está vacío. Hay varias formas de determinar cuándo se llega al final del archivo; en este ejemplo se utiliza el método Peek para examinar la línea siguiente antes de leerla.
    StreamReader reader=new  StreamReader(winDir + "\\system.ini"); try { do { addListItem(reader.ReadLine()); } while(reader.Peek() != -1); }      
         
        catch { addListItem("El archivo está vacío");}

        finally { reader.Close(); }
				

Escribir en un archivo de texto

En este ejemplo de código se utiliza una clase StreamWriter para crear y escribir en un archivo. Si tiene un archivo, puede abrirlo de la misma manera.
    StreamWriter writer = new StreamWriter("c:\\KBTest.txt"); writer.WriteLine("Archivo creado con la clase StreamWriter."); writer.Close(); this.listbox1.Items.Clear(); addListItem("Archivo escrito en C:\\KBTest.txt");
				

Ver información de un archivo

En este ejemplo de código se utiliza un objeto FileInfo para tener acceso a las propiedades de un archivo. En este ejemplo se utiliza Notepad.exe. Las propiedades se muestran en un control ListBox.
    FileInfo FileProps  =new FileInfo(winDir + "\\notepad.exe"); addListItem("Nombre de archivo = " + FileProps.FullName); addListItem("Fecha de creación = " + FileProps.CreationTime); addListItem("Fecha del último acceso = " + FileProps.LastAccessTime); addListItem("Fecha de la última escritura = " + FileProps.LastWriteTime); addListItem("Tamaño = " + FileProps.Length); FileProps = null;
				

Enumerar unidades de disco

En este ejemplo de código se utilizan las clases Directory y Drive para enumerar las unidades lógicas de un sistema. En este ejemplo, los resultados se muestran en un control ListBox.
    string[] drives = Directory.GetLogicalDrives(); foreach(string drive in drives) { addListItem(drive); }
				

Enumerar subcarpetas

En este ejemplo de código se utiliza el método GetDirectories de la clase Directory para obtener una lista de carpetas.
    string[] dirs = Directory.GetDirectories(winDir); foreach(string dir in dirs) { addListItem(dir); }
				

Enumerar archivos

En este ejemplo de código se utiliza el método GetFiles de la clase Directory para obtener una lista de archivos.
    string[] files= Directory.GetFiles(winDir); foreach (string i in files) { addListItem(i); }
				
Cuando un usuario obtiene acceso a los archivos pueden surgir muchos problemas. Puede que los archivos no existan, que se estén usando o que los usuarios no dispongan de permisos para los archivos o las carpetas a los que están intentando tener acceso. Es importante tener en cuenta todas estas posibilidades al escribir el código y al tratar las excepciones que puedan generarse.

Ejemplo paso a paso

  1. En Visual C# .NET o en Visual C# 2005, cree una nueva aplicación para Windows. Se creará Form1 de forma predeterminada.
  2. Abra la ventana de código de Form1.
  3. Elimine todo el código en el Editor de código.
  4. Pegue el siguiente código en la ventana del Editor de código:
    using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO;
    
    namespace fso_cs {
       
       /// <summary> /// Descripción breve de Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { 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; string    winDir=System.Environment.GetEnvironmentVariable("windir"); private System.Windows.Forms.ListBox listbox1; /// <summary> /// Variable del diseñador requerida. /// </summary> private System.ComponentModel.Container components = null;
    
          public Form1() { // // Necesario para admitir el Diseñador de Windows Forms. // InitializeComponent();
    
             // // TO DO: Agregar código de constructor después de llamar a InitializeComponent. // }
    
          /// <summary> /// Limpiar los recursos que se estén utilizando. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }
    
          #region Código generado por el Diseñador de Windows Forms /// <summary> /// Método necesario para mantener compatibilidad con el Diseñador; no modifique /// el contenido del método con el editor de código. /// </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.listbox1 = new System.Windows.Forms.ListBox(); this.button4 = new System.Windows.Forms.Button(); this.button5 = new System.Windows.Forms.Button(); this.button6 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(216, 32);
    
             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(216, 64); 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(216, 96); 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); // // listbox1 // this.listbox1.Location = new System.Drawing.Point(24, 24); this.listbox1.Name = "listbox1"; this.listbox1.Size = new System.Drawing.Size(176, 199); this.listbox1.TabIndex = 0; // // button4 // this.button4.Location = new System.Drawing.Point(216, 128); 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(216, 160); 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(216, 192); 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); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(360, 273); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.button6, this.button5, this.button4, this.button3, this.button2, this.button1, this.listbox1}); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false);
    
          } #endregion
    
          /// <summary> /// Punto de entrada principal de la aplicación. /// </summary> [STAThread] static void Main() {
          
             Application.Run(new Form1()); }
    
          private void button6_Click(object sender, System.EventArgs e) { //Cómo obtener una lista de archivos (en el ejemplo se utiliza la carpeta Windows). this.listbox1.Items.Clear(); string[] files= Directory.GetFiles(winDir); foreach (string i in files) { addListItem(i); } }
    
          private void button1_Click(object sender, System.EventArgs e) { //Cómo leer un archivo de texto. //try...catch es para tratar un archivo con 0 bytes. this.listbox1.Items.Clear(); StreamReader reader=new  StreamReader(winDir + "\\system.ini"); try { do { addListItem(reader.ReadLine()); } while(reader.Peek() != -1); }      
             
             catch { addListItem("El archivo está vacío");}
    
             finally { reader.Close();}
            
    
          }
    
          private void Form1_Load(object sender, System.EventArgs e) { this.button1.Text = "Leer archivo de texto"; this.button2.Text = "Escribir archivo de texto"; this.button3.Text = "Ver información de archivo"; this.button4.Text = "Enumerar unidades"; this.button5.Text = "Enumerar subcarpetas"; this.button6.Text = "Enumerar archivos"; }
    
          private void button5_Click(object sender, System.EventArgs e) { //Cómo obtener una lista de carpetas (en este ejemplo se utiliza la carpeta Windows). this.listbox1.Items.Clear(); string[] dirs = Directory.GetDirectories(winDir); foreach(string dir in dirs) { addListItem(dir);
                                                          
             } }
    
          private void button4_Click(object sender, System.EventArgs e) { //Demuestra cómo obtener una lista de unidades de disco. this.listbox1.Items.Clear(); string[] drives = Directory.GetLogicalDrives(); foreach(string drive in drives) { addListItem(drive); } }
    
          private void button3_Click(object sender, System.EventArgs e) { //Cómo recuperar las propiedades de archivo (en este ejemplo se utiliza Notepad.exe). this.listbox1.Items.Clear(); FileInfo FileProps  =new FileInfo(winDir + "\\notepad.exe"); addListItem("Nombre de archivo = " + FileProps.FullName); addListItem("Fecha de creación = " + FileProps.CreationTime); addListItem("Fecha del último acceso = " + FileProps.LastAccessTime); addListItem("Fecha de la última escritura = " + FileProps.LastWriteTime); addListItem("Tamaño = " + FileProps.Length); FileProps = null; }
          
          private void addListItem(string value) { this.listbox1.Items.Add(value); }
    
          private void button2_Click(object sender, System.EventArgs e) { //Muestra cómo crear y escribir en un archivo de texto. StreamWriter writer = new StreamWriter("c:\\KBTest.txt"); writer.WriteLine("Archivo creado con la clase StreamWriter."); writer.Close(); this.listbox1.Items.Clear(); addListItem("Archivo escrito en C:\\KBTest.txt"); } } }
    Nota
    Debe cambiar el código en Visual Studio 2005. De forma predeterminada, Visual C# agrega un formulario al proyecto cuando se crea un proyecto de Windows Forms. El formulario se denomina Form1. Los dos archivos que lo representan se denominan Form1.cs y Form1.designer.cs. Debe escribir el código en el archivo Form1.cs. El Diseñador de Windows Forms escribe el código en el archivo Form1.designer.cs.

    Para obtener más información acerca del Diseñador de Windows Forms en Visual C# 2005, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/es-es/library/ms173077.aspx
  5. Presione F5 para generar el programa y, a continuación, ejecútelo. Haga clic en los botones para ver las distintas acciones. Al ver el código de ejemplo, quizás desee contraer el área denominada Código generado por el Diseñador de Windows Forms para ocultar este código.

Propiedades

Id. de artículo: 304430 - Última revisión: viernes, 24 de noviembre de 2006 - Versión: 4.1
La información de este artículo se refiere a:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbhowtomaster kbio KB304430

Enviar comentarios

 

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