fseek后fread不工作

时间:2014-09-17 23:25:23

标签: c file-io fread

我有一小段代码,它不断从.wav文件读取2字节样本并将它们写入新文件,并且应该能够向后搜索以重复写入文件的各个部分。这是它的样子:

while (readRemaining > 0) {
    while (sizeToRead > 0 && readRemaining > 0) {
        fread(&leftSample, 2, 1, fp);
        fread(&rightSample, 2, 1, fp);
        fwrite(&leftSample, 2, 1, fpout);
        fwrite(&rightSample, 2, 1, fpout);
        sizeToRead -= 4;
        readRemaining -= 4;
    }
    repeatCount++;
    sizeToRead = _grainSize;
    if (repeatCount < REPEATMAX) {
        fseek(fp, -sizeToRead, SEEK_CUR);
        readRemaining += sizeToRead;
    }
    else {
        repeatCount == 0;
    }
}

我知道它很慢并且不是最佳的,但这不是我所担心的。出于某种原因,fread在第一次迭代后通过外部while循环停止工作;即,在第一个if块中的fseek之后。

如果REPEATMAX为1,则读取文件并写入新文件没问题。但如果有任何重复,文件会卡在fseek'd的位置。我逐步使用gdb并观察它正确搜索,但每次后续读取都没有改变leftSample或rightSample,文件指针也不会再增加。在调试时我尝试在读取失败后发送错误(fp),但它返回0。

那么,有什么想法吗?提前谢谢!

编辑:我应该提一下,这实际上是我以前工作过的重新考虑因素。我会读取等于_grainSize的数量,然后写入REPEATMAX次数,然后继续。这最终将在嵌入式系统中进行,所以我正在尝试不同的方法来测试内存和性能之间的权衡......当我切换到这个逐个样本的方法时,它就停止了工作。

0 个答案:

没有答案