Próbuję napisać kod, aby odczytać plik binarny w buforze, a następnie zapisać bufor do innego pliku. Mam następujący kod, ale bufor przechowuje tylko kilka znaków ASCII z pierwszej linii w pliku i nic więcej.
int length;
char * buffer;
ifstream is;
is.open ("C:\\Final.gif", ios::binary );
// get length of file:
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);
// allocate memory:
buffer = new char [length];
// read data as a block:
is.read (buffer,length);
is.close();
FILE *pFile;
pFile = fopen ("C:\\myfile.gif", "w");
fwrite (buffer , 1 , sizeof(buffer) , pFile );
Odpowiedzi:
Jeśli chcesz to zrobić w C ++, zrób to tak:
Jeśli potrzebujesz tych danych w buforze, aby je zmodyfikować, zrób to:
źródło
char
jest używany w C / C ++ do przechowywania bajtów (i jest od 40 lat). jest to bezpieczne, o ile nie próbujesz faktycznie UŻYWAĆ tych danych jako znaków (nie używaj na nich strlen (), nie drukuj na konsoli itp.). c ++ 17 wprowadzastd::byte
do tego celu (która jest nadal char faktyczniechar
w przebraniu)Oto krótki przykład, sposób użycia w C ++
rdbuf
. Mam to z sieci. Nie mogę znaleźć mojego oryginalnego źródła na ten temat:źródło
Zamiast tego użyj długości.
Lepiej też używać
fopen
z „wb
” ....źródło
buffer.length()
dla bufora, może mieć w sobie wartości NULL, co jest sprzeczne z celem strlen / length ().sizeof(buffer)
.sizeof (buffer) to rozmiar wskaźnika w ostatniej linii, a NIE rzeczywisty rozmiar bufora. Zamiast tego musisz użyć już ustalonej długości
źródło
Długość należy przekazać do fwrite zamiast sizeof (buffer).
źródło
Jest o wiele prostszy sposób. Nie ma znaczenia, czy jest to plik binarny czy tekstowy.
Użyj noskipws.
źródło
Można to zrobić za pomocą prostych poleceń w poniższym fragmencie.
Kopiuje cały plik o dowolnym rozmiarze. Brak ograniczeń rozmiaru!
Po prostu użyj tego. Przetestowane i działa !!
Mniejszy rozmiar bufora byłby pomocny w kopiowaniu małych plików. Nawet "char buffer [2]" załatwiłby sprawę.
źródło
int[]
zamiastchar[]
?char[]
również z plikami o dowolnym rozmiarze, co oznacza, że nie ma warunku, aby rozmiar pliku był wielokrotnością rozmiaru bufora.