C# Language
Archivo y Stream I / O
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 bloqueusing
como se muestra arriba o llamando manualmente amyStream.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);
}