Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Cnvertire file in byte
martedì 10 gennaio 2006 - 14.59
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Juwan
Profilo
| Junior Member
76
messaggi | Data Invio:
mar 10 gen 2006 - 14:59
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
7.999
messaggi | Data Invio:
mar 10 gen 2006 - 15:17
>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
76
messaggi | Data Invio:
mar 10 gen 2006 - 15:42
>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
7.999
messaggi | Data Invio:
mar 10 gen 2006 - 16:27
>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
76
messaggi | Data Invio:
mar 10 gen 2006 - 18:24
>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
7.999
messaggi | Data Invio:
mer 11 gen 2006 - 15:16
>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
76
messaggi | Data Invio:
mer 11 gen 2006 - 21:19
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
7.999
messaggi | Data Invio:
gio 12 gen 2006 - 14:59
>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/
Torna su
Stanze Forum
Elenco Threads
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 !