Cnvertire file in byte

martedì 10 gennaio 2006 - 14.59

Juwan Profilo | Junior Member

Salve ragazzi, sto cercando di trasformare un file word 2003, in un array di byte,
per poi poterlo successivamente convertire, per così tornare al file originale, ho fatto nella
seguente maniera, ma quando tento di aprire il file word convertito, viene segnalato un errore
che dice, che word non è in grado di visualizzare il file correttamente e per farlo è necessario
installare un convertitore, non so se questo dipende dalla mia errata impostazione dell'encoding
di word, sapete dirmi per caso qual'è con precisione? Ultima cosa come mai, per affettuare la conversione
del file viene impiegato diverso tempo? Posto qui sotto il codice con la speranza che qualcuno
possa aiutarmi.

Encoding en = Encoding.GetEncoding(850);

public void creaFile()
{
ArrayList ritorno = new ArrayList();
try
{

ritorno = converti();
StreamWriter crea = new StreamWriter("C:/TEMP/destinazione.doc");

for (int i = 0; i < ritorno.Count; i++)
{

crea.Write((byte)ritorno[i]);
}
crea.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.StackTrace);
}

}

private ArrayList converti()
{

ArrayList file = new ArrayList();
try
{
FileInfo info = new FileInfo("C:/TEMP/sorgente.doc");

StreamReader st = new StreamReader("C:/TEMP/sorgente.doc", en);

for(long i=0; i<info.Length; i++)
{

file.Add((byte) st.Read());
file.TrimToSize();
}
st.Close();


}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.StackTrace);
}
return file;

}

Brainkiller Profilo | Guru

>Salve ragazzi, sto cercando di trasformare un file word 2003,
>in un array di byte, per poi poterlo successivamente convertire, per così tornare
>al file originale, ho fatto nella seguente maniera, ma quando tento di aprire il file word convertito,

Che utilità avrebbe questa operazione ?
Hai verificato tanto per cominciare che il file sorgente e destinazione siano della stessa dimensione ?

Seconda cosa da verificare, apri i file con un Hex Viewer qualsiasi (Ultraedit per esempio) e verifica che i byte siano uguali.

Se una delle due cose di cui sopra non va bene significa che l'operazione di codifica è andata male, hai sbagliato encoding o non hai riportato completamente tutto il contenuto del file (si vede dalla dimensione).

Una volta appurato questo, vai in Debug nel tuo programma e vedi dove i byte letti e convertiti si corrompono, cioè non corrispondono più rispetto all'originale.
ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Juwan Profilo | Junior Member


>Hai verificato tanto per cominciare che il file sorgente e destinazione
>siano della stessa dimensione ?
>
>Seconda cosa da verificare, apri i file con un Hex Viewer qualsiasi
>
>Se una delle due cose di cui sopra non va bene significa che
>l'operazione di codifica è andata male, hai sbagliato encoding
>o non hai riportato completamente tutto il contenuto del file
>(si vede dalla dimensione).
>
>Una volta appurato questo, vai in Debug nel tuo programma e vedi
>dove i byte letti e convertiti si corrompono, cioè non corrispondono
> più rispetto all'originale.
>ciao

Purtroppo il file di destinazione risulta sempre più grande di quello sorgente, come ho detto nel mio primo post, potrebbe
trattarsi di un problema di encoding, visto che non so quale econding ha word. Spero che ci sia qualche esperto in materia affinchè possa capire dove sbaglio?

Brainkiller Profilo | Guru

>Purtroppo il file di destinazione risulta sempre più grande di
>trattarsi di un problema di encoding, visto che non so quale
>econding ha word. Spero che ci sia qualche esperto in materia
> affinchè possa capire dove sbaglio?

Ci sono due classi apposite per la lettura di file binari (qualsiasi file binario, compresi quelli di Word) e sono la BinaryReader e la BinaryWriter.

Qui trovi l'esempio che vuoi realizzare:
http://msdn.microsoft.com/library/en-us/cpguide/html/cpconReadingWritingToNewlyCreatedDataFile.asp

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Juwan Profilo | Junior Member


>Ci sono due classi apposite per la lettura di file binari (qualsiasi
>file binario, compresi quelli di Word) e sono la BinaryReader
> e la BinaryWriter.
>

Ho provato ad utilizzare alla lettera, il codice dell'esempio del MSDN, mettendo però come file in questione, un file doc, ma il problema nell'impossibilità di visualizzare il contenuto del file, rimane lo stesso :-(

Brainkiller Profilo | Guru

>Ho provato ad utilizzare alla lettera, il codice dell'esempio
>del MSDN, mettendo però come file in questione, un file doc,
>ma il problema nell'impossibilità di visualizzare il contenuto
> del file, rimane lo stesso :-(

Evidentemente non segui alla lettera gli esempi. Controlla sempre la dimensione finale dei file. Se il file destinazione è più piccolo significa che non hai scritto tutti i byte del file di origine. Di solito il problema e questo. Se così è forse nel ciclo For hai sbagliato la condizione e quindi ti fa tutto il processo tranne l'ultima parte.
Ma come già detto, entra in debug e verifica cosa succede anche con file più piccoli, magari 2, 3 kb.
ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

Juwan Profilo | Junior Member

Sono riuscito a convertire e riconvertire il file in modo corretto, però ora
ho un altro problema, quando tento di aprire il file word di destinazione,
word non riesce a leggere correttamente il file, infatti vengono
visualizzati nel documento soltanto caratteri sporchi. Sono sicuro che
l'operazione di conversione e deconversione è corretta, perchè se provo con
un file di testo, il file di destinazione viene visualizzato correttamente,
quindi il problema è riuscire a far leggere i dati a word, in maniera
corretta. Qualcuno saprebbe darmi qualche indizio, per riuscire a fare questo?

Brainkiller Profilo | Guru

>visualizzati nel documento soltanto caratteri sporchi. Sono sicuro
>che
>l'operazione di conversione e deconversione è corretta, perchè
>se provo con
>un file di testo, il file di destinazione viene visualizzato
>correttamente,
>quindi il problema è riuscire a far leggere i dati a word, in
>maniera
>corretta. Qualcuno saprebbe darmi qualche indizio, per riuscire
> a fare questo?

Mamma mia che fatica Juwan.... se Word non ti legge il file significa che la conversione NON è corretta, se fosse corretta te lo leggerebbe tranquillamente. Hai provato a vedere il contenuto del file con un HexViewer come ti ho consigliato ? Evidentemente no. A questo punto ti posto il codice (7linee), applicati un po' di più:

FileStream fs = new FileStream("C:\\lorenzo4.doc", FileMode.Open);
BinaryReader br=new BinaryReader(fs);
FileStream fsout=new FileStream("C:\\lorenzo5.doc",FileMode.Create);
BinaryWriter bw=new BinaryWriter(fsout);
bw.Write(br.ReadBytes((int)fs.Length));
bw.Close();
br.Close();

Il file lorenzo4.doc è il file sorgente il file lorenzo5.doc non esiste viene creato leggendo dal file lorenzo4.doc.
Di fatto viene effettuata una copia. Il codice funziona con qualsiasi tipo di file.
ciao



David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
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