Привет, что я пытаюсь сделать, это изменить двоичный файл. Тип файла - wav, например, если номер канала равен 2, а бит на выборку - 16 каждый раз, когда я буду копировать 32/8 = 4 байта. Первое, что нужно сделать, это скопировать заголовок, как есть (эта часть в порядке), а затем изменить его данные. Я создал код для копирования заголовка, а затем часть данных с конца в 10 раз (для тестирования), но вместо того, чтобы копировать 40 байт, он останавливается по 20 по какой-либо причине (даже если бы он сделал это 20 раз, это все еще копируют только 20 байтов). Это код, который делает это. Я не могу определить ошибку, если вы можете видеть, что сказать мне :) Может быть, ошибка где-то еще, так что я написал полную функциюfread fwrite fseek in C
void reverse(char **array)
{
int i=0;
word numberChannels;
word bitsPerSample;
FILE *pFile;
FILE *pOutFile;
byte head[44];
byte *rev;
int count;
if(checkFileName(array[2]) == 0 || checkFileName(array[3]) == 0)
{
printf("wrong file name\n");
exit(1);
}
pFile = fopen (array[2] ,"r");
fseek(pFile, 22, SEEK_SET);//position of channel
fread(&numberChannels, sizeof(word), 1, pFile);
fseek(pFile, 34, SEEK_SET);//position of bitsPerSample
fread(&bitsPerSample, sizeof(word), 1, pFile);
count = numberChannels * bitsPerSample;
rewind(pFile);
fread(head, sizeof(head), 1, pFile);
pOutFile = fopen (array[3] ,"w");
fwrite(head, sizeof(head), 1, pOutFile);
count = count/8;//in my example count = 32 so count =4
rev = (byte*)malloc(sizeof(byte) * count);//byte = unsigned char
fseek(pFile, -count, SEEK_END);
for(i=0; i<10 ; i++)
{
fread(rev, count, 1, pFile);
fwrite(rev, count, 1, pOutFile);
fseek(pFile, -count, SEEK_CUR);
}
fclose(pFile);
fclose(pOutFile);
}
да это был большой mistake..i сделал sum = count и in for i do sum = sum + count –