Leggere un file byte per byte

lunedì 10 marzo 2008 - 20.22

TaiChi Profilo | Junior Member

Vorreicapire come posso leggere un file byte per byte, credo di aver capito di dover usare Filestream ma non sono riuscito a capire come.

Mi serve perchè devo visualizzare un file di testo formattato in modo "strano" da un'altro programmatore e che non riesco a visualizzare per inetro, vorrei capire dove si pianta la lettura e perchè.

Grazie.
Alessio Forconi

rossimarko Profilo | Guru

>Vorreicapire come posso leggere un file byte per byte, credo
>di aver capito di dover usare Filestream ma non sono riuscito
>a capire come.
>
>Mi serve perchè devo visualizzare un file di testo formattato
>in modo "strano" da un'altro programmatore e che non riesco
>a visualizzare per inetro, vorrei capire dove si pianta la lettura
>e perchè.
>
>Grazie.
>Alessio Forconi


Prova con questo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra



Se invece ti serve tutto il contenuto del file puoi usare la funzione ReadBytes
contenutoFile = br.ReadBytes((int)lunghezzaFile);

MarKonE Profilo | Guru

Tempo fa ho usato con soddisfazione il metodo ReadAllBytes :
http://msdn2.microsoft.com/en-us/library/1k0307eb.aspx
http://msdn2.microsoft.com/it-it/library/9tk3bdxw(VS.80).aspx

Restituisce un array di byte...che puoi successivamente gestire e manipolare come vuoi.

Ciao!
My Blog... http://blogs.dotnethell.it/Mark/

TaiChi Profilo | Junior Member

Grazie MarKonE,

ma vale anche per C#?
Alessio Forconi

MarKonE Profilo | Guru

Ciao, attraverso il namespace System.IO :

System.IO.File.ReadAllBytes()


Ciao!

My Blog... http://blogs.dotnethell.it/Mark/

TaiChi Profilo | Junior Member

Grazie ad entrambi
Alessio Forconi

TaiChi Profilo | Junior Member

Ne approfitto per andare oltre nella questione, ho dei byte nel file in questione che esulano dall'intervallo ascii 32-127 e sospetto che possano essere questi ad impedire la corretta lettura del file.

Vorrei chiedervi come posso modificare questi byte agendo direttamente nell'array che ho creato con i metodi che mi avete dato voi.
Sempre che sia possibile.

Grazie.
Alessio Forconi

rossimarko Profilo | Guru

Ciao,

una volta che hai modificato i dati nel tuo array (ed esempio arr[2] = 150) puoi utilizzare la funzione
System.IO.File.WriteAllBytes
che scrive automaticamente tutti i dati nel file.

http://msdn2.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx


TaiChi Profilo | Junior Member

Grazie.
Alessio Forconi

TaiChi Profilo | Junior Member

>Ciao,
>
>una volta che hai modificato i dati nel tuo array (ed esempio
>arr[2] = 150) puoi utilizzare la funzione
>System.IO.File.WriteAllBytes
>che scrive automaticamente tutti i dati nel file.
>
>http://msdn2.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx
>
Ci sto impazzendo da un paio d'ore, non riesco ad usare questa funzione, ho provato così:

if(fileSearch.ShowDialog() == DialogResult.OK)
{
filePath = fileSearch.FileName;
FileInfo fInfo = new FileInfo(filePath);
long lunghezzaFile = fInfo.Length;
byte[] contenutoFile = new byte[lunghezzaFile];
StringBuilder sbAscii = new StringBuilder();
//Sostituire con Application.Path
string newFile = @"C:\Documents and Settings\aforconi\Desktop\Source Update\newFile.txt";

using (FileStream fStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
BinaryReader br = new BinaryReader(fStream);
//Questa routine legge il contenuto del file byte per byte
for (int i = 0; i < lunghezzaFile; i++)
{
contenutoFile.SetValue(br.ReadByte(), i);
if(contenutoFile[i] < 32)//|| contenutoFile[i] > 126)
{
contenutoFile[i] = 32;
// qui da questo errore: Errore 3 Argomento '2': impossibile convertire da 'object' a 'byte[]'
File.WriteAllBytes(newFile, contenutoFile.GetValue(i));

}

}

br.Close();
fStream.Close();

}

Come devo fare per scrivere questi benedetti bytes?

grazie per la pazienza.
Alessio Forconi

rossimarko Profilo | Guru


>// qui da questo errore: Errore 3 Argomento '2': impossibile
>convertire da 'object' a 'byte[]'
> File.WriteAllBytes(newFile, contenutoFile.GetValue(i));

L'errore è dovuto al fatto che la funzione si aspetta l'array completo di byte, non uno solo (la funzione GetValue torna un solo valore).

Quindi devi spostare la chiamata alla
File.WriteAllBytes(newFile, contenutoFile);
al di fuori del ciclo e dopo la chiusura del file.

Marco

TaiChi Profilo | Junior Member

>
>>// qui da questo errore: Errore 3 Argomento '2': impossibile
>>convertire da 'object' a 'byte[]'
>> File.WriteAllBytes(newFile, contenutoFile.GetValue(i));
>
>L'errore è dovuto al fatto che la funzione si aspetta l'array
>completo di byte, non uno solo (la funzione GetValue torna un
>solo valore).
>
>Quindi devi spostare la chiamata alla File.WriteAllBytes(newFile,
>contenutoFile); al di fuori del ciclo e dopo la chiusura del
>file.
>
>Marco
Grazie. Era così semplice

Alessio Forconi
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5