allora con questo codice credo di rendere bene l'idea su quello che voglio fare.
Il codice serve solo a scopo didattico. Leggo in memoria l'intero contenuto di un file e lo riscrivo a chunks di 2304 bytes in un'altro file...il File di origine pesa 100040 Bytes (ma i primi 44 bytes sono di header, non mi servono)codice:#define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_WARNINGS #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <math.h> const LPSTR strFileIn = TEXT("C:\\Users\\giangaetano\\Desktop\\testcase.wav"); const LPSTR strFileOut = TEXT("C:\\Users\\giangaetano\\Desktop\\marameo.wav"); int main() { DWORD dwBuffer = 100000; DWORD dwChunk = 2304; LPSTR header = new char[44]; PBYTE pWAVBuffer = new BYTE[dwBuffer]; PBYTE pWAVChunk = new BYTE[dwChunk]; FILE* pFileIn = NULL; DWORD dwRead = 0; // Slurp file: pWAVBuffer contains all the data pFileIn = fopen( strFileIn, "rb" ); if (pFileIn == NULL) { printf("cannot open file!\n"); return -1; } dwRead = fread(header, 1, 44, pFileIn); dwRead = fread(pWAVBuffer, sizeof(BYTE), dwBuffer, pFileIn); fclose(pFileIn); printf("%d\n", dwRead); // Loop thru data: DWORD dwLoopExit = (DWORD)ceil((double)dwBuffer/dwChunk); DWORD dwChunkSeek = 0; DWORD dwLoop = 0; FILE* pFileOut; pFileOut = fopen( strFileOut, "wb" ); fwrite(header, 1, 44, pFileOut); while (dwLoop < dwLoopExit) { memcpy(pWAVChunk, pWAVBuffer + dwChunkSeek, dwChunk); dwChunkSeek += dwChunk; ++dwLoop; fwrite(pWAVChunk, sizeof(BYTE), dwChunk, pFileOut); printf("%d\n", dwChunkSeek); } fclose(pFileOut); delete[] header; delete[] pWAVBuffer; delete[] pWAVChunk; system("pause"); return 0; }
Calcolando che lo voglio salvare in un unico file man mano a pezzetti di 2304 bytes l'uno, dovrò fare ceil((double)100000/2304) = 44 cicli while, di qui 43 sono chunks pieni mentre l'ultimo e nullpadded in parte...come posso evitare il nulpadded e salvare solo i testanti 928 bytes??



Rispondi quotando