Oppure

Loading
08/10/10 6:21
genni_96

#include <iostream>
#include <fstream>
#include <cstring>

int main()
{
    fstream f;
    char *text;
    unsigned int length;

    f.open("a.mp3", ios::binary!ios::in);

    f.seekg (0, ios::end);
    length = f.tellg();
    f.seekg (0, ios::beg);
    
    text = new char[length+1];
    f.read(text,length);
    f.close();
    
    cout<<text;
    delete[]text;
    system("pause");
}



il problema è che mi legge solo file di testo (come txt, cpp, h, anche il makefile) ma se provo ad aprire (come nel codice sopra) un mp3 on un qualunque alto file (come bmp,wma,jpeg ecc.) mi legge solo i primi 3 o 4 caratteri;
come posso fare a leggere tutto il file;
una volta letto tutto dovrei codificare la stinga letta e riscrivere il file con un'altra estensione, ma questo lo so fare, il probleme è leggere;
aaa
08/10/10 11:28
HeDo
allora, i file binari, a differenza dei file di testo, possono contenere qualsiasi tipo di byte al loro interno, anche il byte 'allora, i file binari, a differenza dei file di testo, possono contenere qualsiasi tipo di byte al loro interno, anche il byte '{parsed_message}', ovvero il terminatore delle stringhe.
la read legge corretamente il contenuto ma poi quando vai a mostrarlo la printf si interrompe ad ogni '{parsed_message}' :) facendo sembrare che il file sia "troncato"

quello che devi fare se vuoi mostrare a video un file binario (per quanto questo possa essere utile), è ciclare stampando "a mano" i char del buffer fino ad incontrare il numero di caratteri letti, ottenuti con la funzione gcount().

cmq consiglio una lettura della reference: cplusplus.com/reference/iostream/istream/read/

EDIT:

riguardando l'esempio della reference, usa un metodo più furbo per fare quello che chiedi, ovvero chiamare cout.write direttamente sul buffer :)', ovvero il terminatore delle stringhe.
la read legge corretamente il contenuto ma poi quando vai a mostrarlo la printf si interrompe ad ogni 'allora, i file binari, a differenza dei file di testo, possono contenere qualsiasi tipo di byte al loro interno, anche il byte '{parsed_message}', ovvero il terminatore delle stringhe.
la read legge corretamente il contenuto ma poi quando vai a mostrarlo la printf si interrompe ad ogni '{parsed_message}' :) facendo sembrare che il file sia "troncato"

quello che devi fare se vuoi mostrare a video un file binario (per quanto questo possa essere utile), è ciclare stampando "a mano" i char del buffer fino ad incontrare il numero di caratteri letti, ottenuti con la funzione gcount().

cmq consiglio una lettura della reference: cplusplus.com/reference/iostream/istream/read/

EDIT:

riguardando l'esempio della reference, usa un metodo più furbo per fare quello che chiedi, ovvero chiamare cout.write direttamente sul buffer :)' :) facendo sembrare che il file sia "troncato"

quello che devi fare se vuoi mostrare a video un file binario (per quanto questo possa essere utile), è ciclare stampando "a mano" i char del buffer fino ad incontrare il numero di caratteri letti, ottenuti con la funzione gcount().

cmq consiglio una lettura della reference: cplusplus.com/reference/iostream/istream/read/

EDIT:

riguardando l'esempio della reference, usa un metodo più furbo per fare quello che chiedi, ovvero chiamare cout.write direttamente sul buffer :)
Ultima modifica effettuata da HeDo 08/10/10 11:30
aaa
08/10/10 12:51
genni_96
non ci avevo pensato,
però mi rimane ancora un dubbio,
se scrivo la variabile text con write() dovrebbe comunque scrivere indipendentemente dal 'non ci avevo pensato,
però mi rimane ancora un dubbio,
se scrivo la variabile text con write() dovrebbe comunque scrivere indipendentemente dal '{parsed_message}', o mi sbaglio??', o mi sbaglio??
aaa
08/10/10 13:01
genni_96
Grazie HeDo
ho risolto il problema:k:
scrivevo con write(text,strlen(text));
ho capito che strlen ritorna il numero di caratteri fino allo 'Grazie HeDo
ho risolto il problema:k:
scrivevo con write(text,strlen(text));
ho capito che strlen ritorna il numero di caratteri fino allo '{parsed_message}''
aaa