编辑该文件的块时,二进制文件大小更改(减少)

时间:2017-01-31 20:38:39

标签: c file filesystems binaryfiles fwrite

我正在进行一些测试以创建文件系统,我创建了一个虚拟磁盘,格式为20个512字节的块,每个文件或目录将存储在其中一个块中。虚拟磁盘的总大小为10.2 Kb,但是当我尝试编辑20个块中的一个时,虚拟磁盘的总大小会减少。

F.E。如果我正在编辑块5,我的虚拟磁盘的大小将变为3.1Kb(512 * 6)。似乎当我使用fwrite()函数来编写一个块时,虚拟磁盘被格式化为块im编辑位置的大小。

感谢。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Format_VDisk (int numberOfRecords,FILE *aStream);
void WriteBlock (int i, char *blockAddr,FILE *aStream);
void ReadBlock (int i, char *blockAddr,FILE *aStream);

#define BLOCK_SIZE 512 

int main()
{
    FILE *aStream;
    char command[10];   
    printf("Command:");
    scanf("%s",command);    
    if(strcmp(command,"init")==0)
    {
        aStream=fopen("VDisk","w+b");
        Format_VDisk(20,aStream);
        fclose(aStream);
    }
    else if(strcmp(command,"write")==0)
    {
        aStream=fopen("VDisk","w+b");
        char block[BLOCK_SIZE];
        memset (block, '1', BLOCK_SIZE);
        WriteBlock(5,block,aStream);
        fclose(aStream);
    }   
}

void Format_VDisk (int numberOfRecords,FILE *aStream)
{
    char block[BLOCK_SIZE];
    memset (block, '0', BLOCK_SIZE);
    WriteBlock (numberOfRecords - 1, block,aStream);    
}

void WriteBlock (int i, char *blockAddr,FILE *aStream)
{
    if(aStream!=NULL)
    {
        fseek (aStream, i * BLOCK_SIZE, SEEK_SET);      
        fwrite (blockAddr,BLOCK_SIZE, 1, aStream);          
    }   
}

0 个答案:

没有答案