Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Leggere file tipo Binary di VB6.
Forum - C# / VB.NET - Leggere file tipo Binary di VB6.

Avatar
ArturoC (Normal User)
Newbie


Messaggi: 3
Iscritto: 02/01/2020

Segnala al moderatore
Postato alle 10:55
Giovedì, 02/01/2020
Ciao,

Sono passto da poco tempo a VB.NET.
Ho un problema nel leggere un file scritto in VB6.
Utilizzando quesoa codice


        Libero = FreeFile()
        FileOpen(Libero, NomeFileArchivio, OpenMode.Binary)

        FileGet(Libero, RitardiEstrattiPrecedentiTutte)
        FileGet(Libero, RitardiEstrattiPrecedentiSingola)
        FileGet(Libero, RitardiEstrattiTutte)
        FileGet(Libero, RitardiEstrattiSingola)
        FileGet(Libero, RitardoEstrattiStoricoTutte)
        . .. . . . . . .

il caricamente si blocca ad un certo punto e restituisce il messaggio:
System.IO.EndOfStreamException: 'Impossibile leggere oltre la fine del flusso.'
"RitardiEstrattiPrecedentiTutte" ecc. sono tutti Array e/o Type:

Es.:
*) Public RitardiEstrattiPrecedentiTutte(0 To 90) As Integer

*) Public QuadroGemelli As TQuadroGemelli

*)    Public Structure TQuadroGemelli
        Dim RitardoStoricoAmbo(,) As Integer '1 To 10, 0 To 5
        Dim RitardoAttualeAmbo(,) As Integer '1 To 10, 0 To 5
        Dim FrequenzaAmbo(,) As Integer '1 To 10, 0 To 5
    End Structure

Grazie dell'aiuto...
Arturo.









PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6068
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:07
Venerdì, 03/01/2020
In VB6 gli integer erano a 16 bit ma in VB.NET sono a 32 bit quindi devi dichiarare il vettore con Short

Public RitardiEstrattiPrecedentiTutte(0 To 90) As Short

E fai attenzione in modo simile per i dati contenuti nelle strutture

P.S. Perché da 0 a 90 se i numeri del lotto sono da 1 a 90?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ArturoC (Normal User)
Newbie


Messaggi: 3
Iscritto: 02/01/2020

Segnala al moderatore
Postato alle 18:13
Venerdì, 03/01/2020
Grazie Guru :-)

Farò come mi dici... e ti farò dapere...

Da 0 a 90 perchè se imposto da 1 a 90 VB mi dice che "i limiti inferiori della matrici possono essere solo "0""...
Io vengo da VB6... :-(

Grazie.... ;)


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6068
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:34
Sabato, 04/01/2020
Ti volevo dire che non puoi in VB.NET (a meno di non creare un'apposita classe) ma potevi in VB6.

Quindi, se in VB6 hai salvato su file il vettore da (1 a 90) non potrai rileggerlo con il VBNET con un vettore da (0 a 90).

Ok?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
ArturoC (Normal User)
Newbie


Messaggi: 3
Iscritto: 02/01/2020

Segnala al moderatore
Postato alle 10:50
Sabato, 04/01/2020
Ah ok.. ecco... ho capito...
Quindi devo ricreare tutto da zero...
E' un lavoro troppo grande... era grande già in VB6, ma qui credo lo sia ancora di più.
Non so se ne vale la pena...
E' un mio software dal 1999 e non faccio il nome per non fare pubblicità... peccato... poteva diventare ancora più versatile...
Grazie di tutto... e Buon anno! :-)

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 660
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 21:39
Lunedì, 06/01/2020
Non gettare la spugna, così presto.

Le matrici che hai salvato in binario da VB6, anche se le hai dichiarate integer (1 to 90), sono salvate (0 to 89).

In VBNET per ricaricarle dichiarale:
Public RitardiEstrattiPrecedentiTutte(0 To 89) As Short

Naturalmente poi da codice dovrai sistemare gli indici aggiungendo -1 tutte le volte che accedi, oppure correggere il codice pensando che le matrici partono da 0

Non ho fatto una prova perché non posso usare VB6 velocemente, potresti avere anche altri problemi, non è detto che l'organizzazione dei Bytes nel salvataggio binario tra i due linguaggi siano identici.

Se avessi ancora problemi e dovessi risolvere un problema come il tuo, salverei due matrici singole identiche con pochi elementi facilmente identificabili,  una con VB6 e una con VBNET, con un HEX Editor confronterei i due contenuti in modo da identificare eventuali discrepanze tra le due versioni.

altra prova da fare è non caricare tutte le matrici

        FileGet(Libero, RitardiEstrattiPrecedentiTutte)
        FileGet(Libero, RitardiEstrattiPrecedentiSingola)
        FileGet(Libero, RitardiEstrattiTutte)
        FileGet(Libero, RitardiEstrattiSingola)
        FileGet(Libero, RitardoEstrattiStoricoTutte)

caricane solo una

        FileGet(Libero, RitardiEstrattiPrecedentiTutte)

non dovresti avere più l'errore 'Impossibile leggere oltre la fine del flusso.'

controlla il contenuto della matrice caricata, ragiona in bytes e in esadecimale per capire le differenze.





in programmazione tutto è permesso
PM Quote