如何在循环中覆盖文件的行?

时间:2015-06-20 13:00:03

标签: c file-io fwrite

我有一个包含数据块的文本文件。块是结构。每个块都有许多记录,在我的例子中每个块有12个记录。我想要做的是对每个块进行排序并将其写入我称为sortedFile的另一个文件中。这是我的代码,我没有发布整个代码,因为它太多了。

while(counter < numOfBlocks){
    fread(buffer, 1, sizeof(block_t), fileOp);

    //get the blocks
    //buffer->blockid = firstBlock;

    for(uint i = 0; i < buffer->nreserved; i++){
        for(uint j = i; j < buffer->nreserved; j++){
            if(buffer->entries[i].num > buffer->entries[j].num){
                smallest = buffer->entries[j].num;
                buffer->entries[j].num = buffer->entries[i].num;
                buffer->entries[i].num = smallest;

                //keep the record id's
                uint smallestID = buffer->entries[j].recid;
                buffer->entries[j].recid = buffer->entries[i].recid;
                buffer->entries[i].recid = smallestID;

                fwrite(&buffer, 1, sizeof(block_t), sortedFile);
                //fscanf(sortedFile,"Record id: %d, Num: %d", buffer->entries[i].recid, smallest);
            }

        }


    }
    counter++;
}

这个while循环正是我想要的。这些块按其buffer->entries[].num字段排序,然后写入sortedFile然后我更新计数器,然后再次启动for循环,我觉得for循环正在写入数据来自前一循环的数据。以下是我打印sortedFile内容的方法。结果我只得到最后一个块的排序值。

  //print out contents of sortedFile
int z = 0;

printf("This is the sorted file: \n");
while(z < reserved){
    fread(buffer, 1, sizeof(block_t), sortedFile);
    printf("Block id: %d, Record id: %d, Num: %d\n", buffer->blockid, buffer->entries[z].recid,
                                                         buffer->entries[z].num);
    z++;
}

fclose(sortedFile);

如何显示我的程序以显示文件的下一部分以写入新数据?我正在考虑使用fwrite与块的大小的某种指针,每次循环运行时都会更新,但我不是那么经验,我无法正确。

0 个答案:

没有答案
相关问题