Przepisanie pliku tekstowego zakodowanego w UTF-8
Ostatnio zmodyfikowano 2013-12-28 13:53
Aaron Temat założony przez niniejszego użytkownika |
Przepisanie pliku tekstowego zakodowanego w UTF-8 » 2013-12-27 23:44:41 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. |
|
Pokropow |
lepsze wykonanie » 2013-12-28 13:22:24 Lepiej najpierw sprawdzić wielkość pliku 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 char * data = malloc( wielkosc ); fread( data, wielkosc, 1, file );
teraz w data masz cały plik. Pomogłem? |
|
pekfos |
» 2013-12-28 13:53:50 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. |
|
« 1 » |