Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao ragazzi, ho un problema riguardante le due classi citate nel titolo. Allora: creo un file dati con:
Codice sorgente - presumibilmente C# / VB.NET
FileStream fs = new FileStream(fileName, FileMode.Create);
fs.close();
Dopodichè aggiungo delle stringhe con:
Codice sorgente - presumibilmente C# / VB.NET
FileStream fileStream = new FileStream(fileName, FileMode.Open);
BinaryWriter bw = new BinaryWriter(fileStream);
bw.Write("uno");
bw.Write("due");
bw.Write("tre");
bw.Close();
fileStream.Close();
Poi leggo le stringhe del file con:
Codice sorgente - presumibilmente C# / VB.NET
FileStream fileStream = new FileStream(fileName, FileMode.Open);
BinaryReader br = new BinaryReader(fileStream);
while (br.PeekChar() != -1)
{
Console.WriteLine(br.ReadString());
}
E fin qui tutto normale. Ma se nella parte di codice contenente il BinaryWriter scrivo questo:
Codice sorgente - presumibilmente C# / VB.NET
FileStream fileStream = new FileStream(fileName, FileMode.Open);
BinaryWriter bw = new BinaryWriter(fileStream);
bw.Seek(0, Begin); // non ricordo il nome dell'enumeratore
bw.Write("uno");
bw.Write("due");
bw.Write("tre");
bw.Close();
fileStream.Close();
e provo a leggere con il BinaryReader, mi trova un EndOfStreamException, dicendomi che non è possibile leggere oltre la fine del flusso. Ma scusate, se il metodo PeekChar guarda il prossimo carattere e restituisce -1 solo quando giunti alla fine, come è possibile superare il limite del flusso?
Come potrei risolvere il problema?
PS. Qualcuno per caso sa come modificare o eliminare una stringa contenuta all'interno di un file? (Penso si debba usare sempre il BinaryWriter)
Ultima modifica effettuata da balto il 07/01/2010 alle 17:37
All'apertura del file, il cursore è posizionato automaicamente all'inizio, quindi l'istruzione Seek è superflua.
Ma io non ho capito bene quando usi BinaryReader, perchè nel tuo codice c'è solo BinaryWriter. Ossia tutti i codici che hai postato sono del tipo apro-leggo-chiudo o apro-scrivo-chiudo. L'eccezione, invece, mi fa pensare che tu abbian letto dopo una scrittura o prima di essa o qualcosa del genere. Il codice preciso qual è?
P.S.: BinaryWriter e BinaryReader servono per la scrittura binaria, ma se devi usare solo stringhe sono totalmente inutili e poco maneggevoli, a favore dei migliori StreamWriter e StreamReader pensati per la manipolazione di file testuali.
Ok per quanto riguarda il post scriptum, non utilizzo StreamReader/Writer perchè il file da analizzare non è un file testuale, bensì un file con estensione ".dat". O mi sto sbagliando? Cioè, posso usare StreamReader/Writer anche con i file dati?
In ogni caso, ho scritto quelle parti di codice perchè sostanzialmente proprio così sono all'interno del programma. Nel senso, clicco il bottone Aggiungi e chiamo il metodo del BinaryWriter, oppure al load del form richiamo il metodo contenente il BinaryReader per visualizzare tutte le stringhe nel file.
Quella riga di codice(bw.Seek) l'ho scritta perchè cercavo di capire come modificare stringhe, magari scrivendo con uno binarywriter in una posizione che definivo io(appunto la posizione 0), però era più che altro una prova.
Poi non so neppure come modificare o eliminare stringhe dal file...aspetto risposte e grazie per l'interessamento Totem.
Ciao =)
Ragazzi per favore rispondetemi. Totem, come mi hai fatto notare tu, è meglio utlizzare le classi StreamReader e StreamWriter. Quindi con una leggerò e con una scriverò. Ma se io voglia modificare una scritta all'interno del file ad una determinata posizione o voglia eliminarla, devo sempre usare queste due classi? Come potrei fare? Per favore rispondetemi, che non so proprio come fare :s
Non continuare a postare. Quando qualcuno vorrà risponderti, lo farà.
L'estensione del file non è limitativa e, anzi, potrebbe anche non esistere. Serve solo per far capire all'elaboratore "come" intepretare ciò che c'è scritto nel file, ma si tratta sempre di dati. Detto questo, puoi aprire un file come più ti aggrada senza rispettarne il formato.
Per modificare, il supporto file non è il più adatto. Dovresti prima trasferire il tutto in una stringa o in un altro oggetto di facile manipolazione, quindi cambiare quel che devi e poi risalvarlo nel file.
Mi scuso per i ripetuti post.
Comunque si Totem, ho fatto come mi hai suggerito e adesso riesco con facilità a scrivere, leggere, modificare e rimuovere stringhe da un file.
Adesso però sorge un altro problema. Dato che vorrei criptare queste stringhe(credo con l'algoritmo DES) e poi inserirle nel file, dovrei inserire degli array di byte (e qui sarei costretto ad utilizzare il BinaryWriter). E fino a qui non è un problema perchè userei il metodo Write. Ma sto cercando in ogni modo di leggere questi bytes dal file tramite uno BinaryReader con il metodo ReadBytes ma non riesco ad ottenere nulla. Infatti se passo questi array di bytes al metodo Decrypt per decriptare, mi dice che i dati non sono validi. Posoto il codice così è tutto più chiaro.
Con la suddetta classe gestisco bene le stringhe sul file. Ma non riesco in ogni modo a leggere array di byte dal file. Ho cercato sulla rete ma niente di utili...Aspetto consigli, grazie (grazie soprattuto al Totem).
Ciao =)