Buscar..


Introducción

Gestiona archivos.

Sintaxis

  • new System.IO.StreamWriter(string path)
  • new System.IO.StreamWriter(string path, bool append)
  • System.IO.StreamWriter.WriteLine(string text)
  • System.IO.StreamWriter.WriteAsync(string text)
  • System.IO.Stream.Close()
  • System.IO.File.ReadAllText(string path)
  • System.IO.File.ReadAllLines(string path)
  • System.IO.File.ReadLines(string path)
  • System.IO.File.WriteAllText(string path, string text)
  • System.IO.File.WriteAllLines(string path, IEnumerable<string> contents)
  • System.IO.File.Copy(string source, string dest)
  • System.IO.File.Create(string path)
  • System.IO.File.Delete(string path)
  • System.IO.File.Move(string source, string dest)
  • System.IO.Directory.GetFiles(string path)

Parámetros

Parámetro Detalles
camino La ubicación del archivo.
adjuntar Si el archivo existe, verdadero agregará datos al final del archivo (adjuntar), falso sobrescribirá el archivo.
texto Texto a escribir o almacenar.
contenido Una colección de cuerdas para escribir.
fuente La ubicación del archivo que desea utilizar.
destino La ubicación a la que desea que vaya un archivo.

Observaciones

  • Asegúrate siempre de cerrar objetos Stream . Esto se puede hacer con un bloque using como se muestra arriba o llamando manualmente a myStream.Close() .
  • Asegúrese de que el usuario actual tenga los permisos necesarios en la ruta que intenta crear el archivo.
  • Las cadenas verbales se deben usar cuando se declara una cadena de ruta que incluye barras diagonales inversas, como por ejemplo: @"C:\MyFolder\MyFile.txt"

Leyendo de un archivo usando la clase System.IO.File

Puede usar la función System.IO.File.ReadAllText para leer todo el contenido de un archivo en una cadena.

string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");

También puede leer un archivo como una matriz de líneas utilizando la función System.IO.File.ReadAllLines :

string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");

Escribir líneas en un archivo usando la clase System.IO.StreamWriter

La clase System.IO.StreamWriter :

Implementa un TextWriter para escribir caracteres en un flujo en una codificación particular.

Usando el método WriteLine , puede escribir contenido línea por línea en un archivo.

Observe el uso de la palabra clave using que garantiza que el objeto StreamWriter se elimine tan pronto como salga de su alcance y, por lo tanto, el archivo se cierre.

string[] lines = { "My first string", "My second string", "and even a third string" };
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt"))
{
    foreach (string line in lines)
    {
        sw.WriteLine(line);
    }
}

Tenga en cuenta que StreamWriter puede recibir un segundo parámetro bool en su constructor, lo que permite Append un archivo en lugar de sobrescribirlo:

bool appendExistingFile = true;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt", appendExistingFile ))
{
    sw.WriteLine("This line will be appended to the existing file");
}

Escribir en un archivo usando la clase System.IO.File

Puede usar la función System.IO.File.WriteAllText para escribir una cadena en un archivo.

string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);

También puede usar la función System.IO.File.WriteAllLines que recibe una IEnumerable<String> como segundo parámetro (a diferencia de una única cadena en el ejemplo anterior). Esto le permite escribir contenido desde una matriz de líneas.

string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);

Lealmente leyendo un archivo línea por línea a través de un IEnumerable

Cuando trabaje con archivos grandes, puede usar el método System.IO.File.ReadLines para leer todas las líneas de un archivo en una IEnumerable<string> . Esto es similar a System.IO.File.ReadAllLines , excepto que no carga todo el archivo en la memoria de una vez, lo que lo hace más eficiente cuando se trabaja con archivos grandes.

IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);

El segundo parámetro de File.ReadLines es opcional. Puede usarlo cuando sea necesario para especificar la codificación.

Es importante tener en cuenta que llamar a ToArray , ToList u otra función similar obligará a que todas las líneas se carguen a la vez, lo que significa que el beneficio de usar ReadLines se anula. Es mejor enumerar sobre IEnumerable usando un bucle foreach o LINQ si se usa este método.

Crea un archivo

Archivo clase estática

Usando el método Create de la clase estática File , podemos crear archivos. Method crea el archivo en la ruta dada, al mismo tiempo que abre el archivo y nos da el FileStream del archivo. Asegúrese de cerrar el archivo una vez que haya terminado con él.

ex1:

var fileStream1 = File.Create("samplePath");
/// you can write to the fileStream1
fileStream1.Close();

ex2:

using(var fileStream1 = File.Create("samplePath"))
{
    /// you can write to the fileStream1
}

ex3:

File.Create("samplePath").Close();

Clase FileStream

Hay muchas sobrecargas de este constructor de clases que en realidad están bien documentadas aquí . El siguiente ejemplo es para el que cubre las funcionalidades más utilizadas de esta clase.

var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);

Puede consultar las enumeraciones para FileMode , FileAccess y FileShare desde esos enlaces. Lo que básicamente significan son los siguientes:

Modo de archivo: Respuestas "¿Se debe crear el archivo? ¿Abrir? ¿Crear si no existe? ¿Abrir?" un poco preguntas

FileAccess: Respuestas "¿Debo poder leer el archivo, escribir en el archivo o en ambos?" un poco preguntas

FileShare: Respuestas "¿Deberían otros usuarios poder leer, escribir, etc. en el archivo mientras lo uso simultáneamente?" un poco preguntas

Copiar archivo

Archivo clase estática

File clase estática puede ser fácilmente utilizado para este propósito.

File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

Nota: mediante este método, el archivo se copia, lo que significa que se leerá desde el origen y luego se escribirá en la ruta de destino. Este es un proceso que consume recursos, llevaría un tiempo relativo al tamaño del archivo y puede hacer que su programa se congele si no utiliza subprocesos.

Mover archivo

Archivo clase estática

Archivo de clase estática puede ser fácilmente utilizado para este propósito.

File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

Nota1: solo cambia el índice del archivo (si el archivo se mueve en el mismo volumen). Esta operación no toma tiempo relativo al tamaño del archivo.

Nota2: no se puede anular un archivo existente en la ruta de destino.

Borrar archivo

string path = @"c:\path\to\file.txt";
File.Delete(path);

Si bien Delete no lanza una excepción si el archivo no existe, generará una excepción, por ejemplo, si la ruta especificada no es válida o la persona que llama no tiene los permisos necesarios. Siempre debe ajustar las llamadas para Delete dentro del bloque try-catch y manejar todas las excepciones esperadas. En caso de posibles condiciones de carrera, ajuste la lógica dentro de la instrucción de bloqueo .

Archivos y directorios

Obtener todos los archivos en el Directorio

 var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);

Devuelve una matriz de FileInfo , que representa todos los archivos en el directorio especificado.

Obtener archivos con extensión específica

 var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);

Devuelve una matriz de FileInfo , que representa todos los archivos en el directorio especificado con la extensión especificada.

Async escribe texto en un archivo usando StreamWriter

// filename is a string with the full path
// true is to append        
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, true))
{
   // Can write either a string or char array
   await file.WriteAsync(text);
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow