Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    11

    [VB6] EOF con file binary

    ciao,

    Ho un problema con la funzione EOF usata con file aperti in modalità Binary
    In particolare in una parte del codice scrivo un file che ho aperto in modalità binary. Lo devo scrivere un carattere per volta. Le istruzioni per scrivere sono:

    codice:
    Dim putChar as string * 1
    Dim msg as string
    
    Open defaultFile For Binary As #1
    For i = 1 To Len(msg)
        putChar = Mid(msg, i, 1)
        Put 1, , putChar
    Next
    close 1
    Poi in un'altra parte del codice leggo il file tramite get. Il codice è:

    codice:
    Dim gotChar as string * 1
    
    Open fName For Binary As #1
    Do While Not EOF(1)
        Get 1, , gotChar
        tmpStr = tmpStr & gotChar
    Loop
    Quello che succede è che ogni tanto, l'EOF diventa true un carattere dopo ciò che mi aspetto. Per esempio:
    Scrivo un file il cui ultimo carattere è 'x'
    quando lo leggo, ogni tanto (?!?) capita che dopo aver letto la 'x' Eof non diventi TRUE ma viene letto un altro carattere che spesso ha un codice ASCII molto basso (spesso non è un carattere della tastiera)
    Preciso che non incorro in nessun errore run-time. Semplicemente c'è un carattere 'fantasma' in più nella stringa finale tmpStr

    ne sapete qualcosa?
    grazie

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Scusa, ma perchè scrivi un carattere alla volta?
    Non puoi usare Print ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    11
    Perchè è un programma di cifratura e l'algoritmo (che non ho scritto io) codifica/decodifica un carattere per volta.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per i file binari non devi usare l'EOF.

    Quando apri il file, determina la sua lunghezza in byte, alloca una stringa con lo spazio sufficiente e leggilo con una sola Get.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    11
    Ok farò così grazie
    Su MSDN però dice che EOF si può usare con i file binary. E' un bug di vb6?

    Ultima cosa . Come si determina la lunghezza in byte di un file?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... puoi usare l'EOF ma non farlo. Dato che conosci la lunghezza del file, che senso ha farlo?

    Per la lunghezza, esistono le funzioni

    FileLen

    e

    LOF

    (vedi MSDN).

    Attenzione ai file molto lunghi ... le funzioni restituiscono un Long.

    Ovvero, semplicemente e velocemente

    codice:
    Dim S As String
    
    Open file For Binary As #1
    S = Space$(LOF(1))
    Get #1, , S
    Close #1
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da nikname
    Perchè è un programma di cifratura e l'algoritmo (che non ho scritto io) codifica/decodifica un carattere per volta.
    Caspita! Allora deve essere veramente inattacabile.

    Originariamente inviato da nikname
    E' un bug di vb6?
    Ma perché ogni volta che si incontra una difficoltà si deve subito pensare che dipenda da un bug dello strumento usato?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.