Come faccio a leggere il contenuto di un file non di testo(zip,bmp...) ed inserirlo in una textbox(multiriga ovviamente)?
![]()
Come faccio a leggere il contenuto di un file non di testo(zip,bmp...) ed inserirlo in una textbox(multiriga ovviamente)?
![]()
Praticamente vuoi ottenere lo stesso effetto che si avrebbe se si aprisse uno di questo file con il bloc notes di Windows?
In poche parole si. Leggendo pochi byte da un file bmp riesco ad ottentere:
66771181550000005400040000950001380
utilizzando il codice:
Che sarebbero i codici ASCII di:codice:For i = 0 To 23 DATA &= ByteArrayTemp(i) Next
BMv 6 ( _
Se invece uso:
Ottengo solo la stringa BMv Cioè non mi inserisce nella variabile DATA(string) tutto, si ferma al primo carattere spazio. Non so se ho reso l'idea.codice:For i = 0 To 23 DATA &= chr(ByteArrayTemp(i)) Next
![]()
Il codice che uso per la lettura del file è:
Quando faccio msgbox (Data) mi esce solo BMvcodice:Dim DATA As String Dim fileTemp As New FileInfo("C:\prova.bmp") Dim fsTemp As FileStream = fileTemp.OpenRead() Dim i As Integer Dim nBytes As Integer = 23 'numero dei byte da leggere, Dim ByteArrayTemp(nBytes) As Byte 'array che contiene i byte letti Dim nBytesReadTemp As Integer = fsTemp.Read(ByteArrayTemp, 0, nBytes) 'effettuo la lettura del file ed inserisco i byte letti nell'array For i = 0 To 23 DATA &= Chr(ByteArrayTemp(i)) Next MsgBox(DATA)
![]()
![]()
![]()
:master: :master:
![]()
![]()
![]()
![]()
così funziona, ma ci vuole troppo tempo per un file intero, qualcosa mi sfugge... :master:codice:Dim DATA As String Dim fileTemp As New FileInfo(".....") Dim fsTemp As FileStream = fileTemp.OpenRead() Dim nBytes As Integer = fileTemp.Length 'numero dei byte da leggere, Dim ByteArrayTemp(nBytes) As Byte 'array che contiene i byte letti Dim nBytesReadTemp As Integer = fsTemp.Read(ByteArrayTemp, 0, nBytes) 'effettuo la lettura del file ed inserisco i byte letti nell'array DATA = System.Text.Encoding.ASCII.GetString(ByteArrayTemp) For I As Integer = 0 To 23 TextBox2.Text &= DATA.Chars(I).ToString Next
se si fa TextBox2.Text = DATA.ToString non funziona, se si legge carattere per carattere si .... :master:
Ans.
ma è ovvio![]()
Tra i byte vi è il carattere nullo che è un string termination; in conversione in stringa alla prima occorrenza si blocca il parser. L'unico modo (credo) per visualizzare in una textbox o messagebox è facendo dopo la conversione da byte in string:
TextBox2.Text = DATA.Replace(Convert.ToChar(0), String.Empty)
Quindi togliere il carattere null.
Ans.
Grazie mille per l'interessamento.
Ho fatto diverse prove ma non riesco a far funzionare il codice che hai postato.
Dovrebbe essere proprio un problema di lettura del file, perché se imposto manualmente la stringa tutto funziona bene:
Potrei anche evitare di inserire quello che leggo dal file in una textbox mi basterebbe inserirlo in una semplice variabile o in un Array. Qualche suggerimento?codice:Dim prova As String = "BMv 6 ( _ @ ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙" Dim prova2() As Byte = System.Text.Encoding.Default.GetBytes(prova) Dim i As Integer For i = 0 To prova.Length - 1 TextBox1.Text &= Chr(prova2(i).ToString) Next![]()
Il mio scopo è quello di inviare un file tramite socket, perciò mi serve leggere i singoli byte dal file.![]()
Non ha senso inserire i dati binari convertiti in ASCII in una textbox quindi lascia perdere.
Pero' mi sembra di capire che i dati stanno gia' in un array di byte ... quindi il problema qual e'? Perche' non utilizzi l'array?
Io vorrei inviare via socket dei files, per i file di testo(txt,HTML,rtf...) non ho problemi. I problemi sorgono con i file BMP,ZIP,AVI... che evidentemente non posso leggerli come dei file di testo. Allora li devo aprire, leggere ed inviare byte per byte, perciò dicevo di inserire il loro contenuto in una textbox o un array. Spero di essermi spiegato.
![]()
Sì ... lo avevo capito ... ma perche' per fare quanto chiedi non utilizzi l'array di byte che impieghi per la lettura del file?