Problemi con StreamReader/Writer

martedì 02 marzo 2010 - 10.55

mammamia Profilo | Newbie

Ho questo problema, devo trovare da un file .txt un riferimento (M05) e devo cancellare la riga che lo contiene con la sua precedente.
Ho Formulato questo frammento di codice, ma mi sto intrecciando con l'apertura e la chiusura dei vari Stream.

Potete aiutarmi per favore???

//Creo una stringa che rappresenta la riga letta dallo streamReader string line = string.Empty; // Creo un file di appoggio per scriverci dei dati temporanei string fileAppoggio = @"C:\appoggio.txt"; StreamWriter scriviAppoggio = File.CreateText(fileAppoggio); //Creo uno StreamReader per leggere il file di originale StreamReader leggiOriginale= new StreamReader(fileOriginale); //Creo uno StreamWriter per scrivere le righe nel nuovo file StreamWriter scriviDefinitivo = File.CreateText(fileDefinitivo); // Cancella la voce di riferimento M05, la riga precedente e scrivi CORPO while (line != null) { // Leggo dal file Originale line = leggiOriginale.ReadLine(); // Lo scrivo nel file temporaneo Appoggio scriviAppoggio.WriteLine(line); // Se trovo il riferimento attivo la procedura if (line == "M05") { //Estraggo in un array le righe che compongono il file appoggio string[] righeCorpo = File.ReadAllLines(fileAppoggio); //Identifico quante sono le righe del file appoggio int NumRigheCorpo = righeCorpo.Length; // Cancello le ultime due righe del file di appoggio int righeTemp = NumRigheCorpo - 2; for (int i = 1; i <= righeTemp; i++) { //Creo uno StreamReader per leggere il file di appoggio StreamReader leggiAppoggio = new StreamReader(fileAppoggio); line = leggiAppoggio.ReadLine(); //Leggi la riga dal file appoggio scriviDefinitivo.WriteLine(line); //Scrivila nel file definitivo } scriviDefinitivo.WriteLine("CORPO"); leggiAppoggio.Close(); } } scriviAppoggio.Close(); leggiOriginale.Close(); scriviDefinitivo.Close();

Vi prego

AntCiar Profilo | Expert

Ciao.

Prova coì:

StreamReader readOrigFile = new StreamReader(@"C:\....."); string line = readOrigFile.ReadLine(); List<string> newFilePart = new List<string>(); while (line != null) { if (line.Equals("M05")) { newFilePart.RemoveAt(newFilePart.Count - 1); } else { newFilePart.Add(line); } line = readOrigFile.ReadLine(); } readOrigFile.Close(); readOrigFile.Dispose(); readOrigFile = null; StreamWriter newFile = new StreamWriter(@"C:\.....", false); foreach (string l in newFilePart) { newFile.WriteLine(l); } newFile.Close(); newFile.Dispose(); newFile = null;
Cristian Barca

mammamia Profilo | Newbie

Avevo provato con List<string> ma non avevo risolto, probabilmente mi sono confuso, poi la scarsa esperienza ha fatto il resto

Visto che ci sono ti pongo una domanda che per te è banale, ma non per me.

Come hai fatto a districarti tra le complessità delle classi del Framework (oltre che con l'esperienza ovviamente)?
Hai da suggerirmi qualche lettura tecnica che mi possa aiutare?


Grazie mille comunque !

AntCiar Profilo | Expert

Ciao.

Ad oggi c'è l'esperienza di 7 anni a combattere con il .NET. All'inizio programmavo conoscendo solo quel poco di classi base (la classe List ad esempio manco sapevo che esistesse) poi dopo aver completato il lavoro, cervavo in internet progetti o utility simili a quelle che avevo realizzato e mi studiavo il codice e riscrivevo il tutto cercando di ottimizzare. Molto può esserti di aiuto anche la Guida in linea di NET. Libri da consigliarti non saprei perchè fino ad ora non ne ho usato nessuno. Cerca sempre di migliorare il codice scritto scervellandoti e cercando su internet e vedrai che riuscirai a fare maggiore chiarezza sulle classi del Framework.

Ciao ciao
Cristian Barca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5