Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przepisanie pliku tekstowego zakodowanego w UTF-8

Ostatnio zmodyfikowano 2013-12-28 13:53
Autor Wiadomość
Aaron
Temat założony przez niniejszego użytkownika
Przepisanie pliku tekstowego zakodowanego w UTF-8
» 2013-12-27 23:44:41
C/C++
int funkcja()
{
    wchar_t buf[ 6000 ];
    wstring akt;
    size_t uiRead;;
    FILE * plik = fopen( "temp", "r, ccs=UTF-8" );
    memset( buf, 0, sizeof( buf ) );
    while( uiRead = fread( buf, sizeof( buf ), 1, plik ) );
   
    {
        akt.append( buf );
        memset( buf, 0, sizeof( buf ) );
    }
    fclose( plik );
   
    FILE * plik2 = fopen( "test.txt", "w, ccs=UTF-8" );
    fwprintf( plik2, L"%s", akt.c_str() );
    fclose( plik2 );
    return 0;
}

Po uruchomieniu programu powstał plik ważący 7KB (oryginalny plik waży 135KB). Czemu tak się stało? Wątpie aby wstring akt został przepełniony.
P-100385
Pokropow
lepsze wykonanie
» 2013-12-28 13:22:24
Lepiej najpierw sprawdzić wielkość pliku
C/C++
FILE * file;
fseek( file, 0, SEEK_END );
size_t wieklosc = fteel( file );
fseek( file, 0, SEEK_SET );

potem tworzysz bufor o wielkości pliku funkcją malloc lub operatorem new i wrzucasz do niego cały plik na raz za pomocą fread

C/C++
char * data = malloc( wielkosc );
fread( data, wielkosc, 1, file );

teraz w data masz cały plik. Pomogłem?

P-100401
pekfos
» 2013-12-28 13:53:50
Czemu tak się stało?
Bo zapisujesz tylko ostatni blok. Pętla nic nie robi z wczytywanymi danymi (średniki, średniki..). Poza tym, po co bawisz się w ustawianie kodowania (jeśli w ogóle to działa) i wchar_t? I po co bawisz się ze stringiem, skoro możesz na bieżąco zapisywać odczytywane dane? Btw, z takimi argumentami fread() możesz gubić dane.
P-100404
« 1 »
  Strona 1 z 1