txt numeros leer lectura guardarlo guardar escritura escribir desde datos con arreglo archivos archivo c# file-io textreader textwriter

c# - numeros - leer un archivo y guardarlo en un arreglo c



Se comparte la infracción IOException al leer y escribir en el archivo C# (3)

Aquí está mi código:

public static TextWriter twLog = null; private int fileNo = 1; private string line = null; TextReader tr = new StreamReader("file_no.txt"); TextWriter tw = new StreamWriter("file_no.txt"); line = tr.ReadLine(); if(line != null){ fileNo = int.Parse(line); twLog = new StreamWriter("log_" + line + ".txt"); }else{ twLog = new StreamWriter("log_" + fileNo.toString() + ".txt"); } System.IO.File.WriteAllText("file_no.txt",string.Empty); tw.WriteLine((fileNo++).ToString()); tr.Close(); tw.Close(); twLog.Close();

Lanza este error:

IOException: infracción de uso compartido en la ruta C: / Users / Water Simulation / file_no.txt

Lo que estoy tratando de hacer es abrir un archivo con el nombre log_x.txt y tomar la "x" del archivo file_no.txt. Si file_no.txt está vacío, haga el nombre log_1.txt del archivo log y escriba "fileNo + 1" to file_no.txt.Después de que un nuevo programa inicie, el nuevo nombre del archivo de registro debe ser log_2.txt. Pero recibo este error y no pude entender qué estoy haciendo mal. Gracias por la ayuda.


Bueno, estás intentando abrir el archivo file_no.txt para leer y escribir usando secuencias separadas. Es posible que esto no funcione, ya que la secuencia de lectura bloqueará el archivo, por lo que no se puede crear la secuencia de escritura y se obtiene la excepción.

Una solución sería leer el archivo primero, cerrar la secuencia y luego escribir el archivo después de aumentar el fileNo . De esta forma, el archivo solo se abre de una en una.

Otra forma sería crear una secuencia de archivos para el acceso de lectura y escritura de la siguiente manera:

FileStream fileStream = new FileStream(@"file_no.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);

La respuesta aceptada a esta pregunta también parece tener una buena solución, aunque supongo que no desea permitir lecturas compartidas.

Posible solución alternativa
Entiendo que desea crear archivos de registro únicos cuando se inicie su programa. Otra forma de hacerlo sería esta:

int logFileNo = 1; string fileName = String.Format("log_{0}.txt", logFileNo); while (File.Exists(fileName)) { logFileNo++; fileName = String.Format("log_{0}.txt", logFileNo); }

Esto aumenta el número hasta que encuentra un número de archivo donde el archivo de registro no existe. Desventaja: si tiene log_1.txt y log_5.txt , el siguiente archivo no será log_6.txt sino log_2.txt .

Para superar esto, podría enumerar todos los archivos en su directorio con el log_*.txt máscara log_*.txt y encontrar el número más grande realizando una manipulación de cadenas.

Las posibilidades son infinitas :-D


Bueno, esto puede ser viejo, pero la respuesta aceptada no funcionó para mí. Esto se produce cuando intenta leer o escribir un archivo que acaba de crear a partir de una secuencia separada. Resolver esto es muy simple, solo deseche el flujo de archivos que usó para crearlo y luego podrá acceder al archivo libremente.

if (!File.Exists(myfile)) { var fs = new FileStream(fav, FileMode.Create); fs.Dispose(); string text = File.ReadAllText(myfile); }


introduzca la descripción de la imagen aquí

var stream = new System.IO.FileStream(filePath, System.IO.FileMode.Create); resizedBitmap.Compress(Bitmap.CompressFormat.Png, 200, stream); //problem here stream.Close(); return resizedBitmap;

En el método de Compresión, pasaba el valor del parámetro de calidad a 200, lo que lamentablemente no permite valores fuera del rango 0-100.

Cambié de nuevo el valor de la calidad a 100 y el problema se solucionó.