Si encuentras alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.
Solución:
La respuesta de Brannon explica cómo leer. binario datos. si quieres leer texto datos, debería estar leyendo cadenas y luego analizándolas, para lo cual existen métodos integrados, por supuesto.
Por ejemplo, para leer un archivo con datos:
10
10.5
hello
Podrías usar:
using (TextReader reader = File.OpenText("test.txt"))
int x = int.Parse(reader.ReadLine());
double y = double.Parse(reader.ReadLine());
string z = reader.ReadLine();
Tenga en cuenta que esto no tiene manejo de errores. En particular, generará una excepción si el archivo no existe, las dos primeras líneas tienen datos inapropiados o hay menos de dos líneas. Dejará un valor de null
en z
si el archivo solo tiene dos líneas.
Para una solución más robusta que puede fallar con más gracia, querrá verificar si reader.ReadLine()
devuelto null
(indicando el final del archivo) y use int.TryParse
y double.TryParse
en vez de Parse
métodos.
Eso es asumiendo que hay un separador de línea entre los valores. Si realmente quieres leer un string Me gusta esto:
10 10.5 hello
entonces el código sería muy similar:
using (TextReader reader = File.OpenText("test.txt"))
string text = reader.ReadLine();
string[] bits = text.Split(' ');
int x = int.Parse(bits[0]);
double y = double.Parse(bits[1]);
string z = bits[2];
Una vez más, querrá realizar la detección y el manejo de errores apropiados. Tenga en cuenta que si el archivo realmente solo constaba de una sola línea, es posible que desee utilizar File.ReadAllText
en cambio, para hacerlo un poco más simple. También hay File.ReadAllLines
que lee todo el archivo en un string array de lineas
EDITAR: si necesita dividir por ninguna espacio en blanco, entonces probablemente sería mejor leer el archivo completo con File.ReadAllText
y luego usando una expresión regular para dividirlo. En ese punto, me pregunto cómo representas un string que contiene un espacio.
En mi experiencia, generalmente sabe más sobre el formato que esto: si habrá un separador de línea o múltiples valores en la misma línea separados por espacios, etc.
yo tambien agregaria eso mixed Los formatos binarios/de texto son generalmente desagradables de manejar. El manejo de texto simple y eficiente tiende a leer en un búfer, lo que se vuelve problemático si también hay datos binarios. Si necesita una sección de texto en un archivo binario, generalmente es mejor incluir una longitud prefix para que solo esa pieza de datos pueda ser decodificada.
using (FileStream fs = File.OpenRead("file.txt"))
BinaryReader reader = new BinaryReader(fs);
int intVal = reader.ReadInt32();
float floatVal = reader.ReadSingle();
string stringVal = reader.ReadString();
No es exactamente la respuesta a su pregunta, pero es solo una idea para considerar si es nuevo en C#: si está usando un archivo de texto personalizado para leer algunos parámetros de configuración, es posible que desee consultar los temas de serialización XML en .NET.
La serialización XML proporciona una forma sencilla de escribir y leer archivos con formato XML. Por ejemplo, si tiene una clase de configuración como esta:
public class Configuration
public int intVal get; set;
public float floatVal get; set;
public string stringVal get; set;
simplemente puede guardarlo y cargarlo usando el XmlSerializer
clase:
public void Save(Configuration config, string fileName)
XmlSerializer xml = new XmlSerializer(typeof(Configuration));
using (StreamWriter sw = new StreamWriter(fileName))
xml.Serialize(sw, config);
public Configuration Load(string fileName)
XmlSerializer xml = new XmlSerializer(typeof(Configuration));
using (StreamReader sr = new StreamReader(fileName))
return (Configuration)xml.Deserialize(sr);
Save
El método definido anteriormente creará un archivo con el siguiente contenido:
0
0.0
Lo bueno de este enfoque es que no es necesario cambiar el Save
y Load
métodos si su Configuration
cambios de clase.