Utilizzando C#, ho bisogno di leggere un file binario compresso creato utilizzando FORTRAN. Il file viene salvato in un formato "non formattato sequenziale" come descritto qui (circa a metà strada in basso nella pagina nella sezione "non formattato Sequential Files"):analizza il contenuto dalla struttura in un file binario
http://www.tacc.utexas.edu/services/userguides/intel8/fc/f_ug1/pggfmsp.htm
Come si può vedere dalla URL, il il file è organizzato in "blocchi" di 130 byte o meno e include 2 byte di lunghezza (inseriti dal compilatore FORTRAN) che circondano ogni blocco.
Quindi, ho bisogno di trovare un modo efficiente per analizzare il reale carico utile del file lontano dalla formattazione del compilatore.
Dopo aver estratto il carico utile effettivo dal file, ho quindi bisogno di analizzarlo nei suoi vari tipi di dati. Questo sarà il prossimo esercizio.
I miei primi pensieri sono di borseggiare l'intero file in un array di byte usando File.ReadAllBytes
. Quindi, basta scorrere i byte, saltare la formattazione e trasferire i dati effettivi in un secondo array di byte.
Alla fine, quella matrice di secondo byte dovrebbe contenere il contenuto del file effettivo meno tutta la formattazione, che avrei quindi bisogno di tornare indietro per ottenere ciò di cui ho bisogno.
Dato che sono abbastanza nuovo per C#, ho pensato che ci sarebbe stato un modo migliore e più accettato di affrontarlo.
Inoltre, nel caso in cui è utile, questi file potrebbero essere abbastanza grande (diciamo 30 MB), se la maggior parte sarà molto più piccola ...
Grazie. Sulla base dei tuoi commenti, ho scritto del codice che carica il mio file in un array di byte e produce un secondo array di byte pulito (privo di indicatori di lunghezza).Ora sto tentando di analizzarlo in vari valori scalari usando BitConverter, anche se mi sembra un po 'brutto in quanto ho bisogno di mantenere il mio puntatore nell'array mentre lo converto. Supponendo che io continui con l'array di byte, c'è un modo migliore per ottenere vari scalari da esso? Oh, e non sto usando 4.0 ... –
È possibile avvolgere l'array di byte in un 'MemoryStream' e usare un' BinaryReader'. 'BinaryReader' ricorda la propria posizione quindi non è necessario. –