我在C ++中使用fread和fwrite函数时遇到了惊人的困难。
该项目正在编写一个基本的FAT16文件系统,我们只能使用fread和fwrite。
当我最初编写文件时,我的代码如下所示:
directoryTable = (directoryEntry *)malloc(clusterSize);
for (int i = 0; i < bootRecord[0] / 128 ; ++i){
directoryEntry * newEntry = (directoryEntry *)malloc(sizeof(directoryEntry));
newEntry->name = (char *)malloc(112);
newEntry->name[0] = 'a'
write(1, &(newEntry->name[1]), 1);
newEntry->size = 0;
newEntry->type = 0;
newEntry->creation = 0x0000;
newEntry->index = 0;
fwrite(newEntry->name, 112, 1, fp);
fwrite(&newEntry->size, sizeof(int), 1, fp);
fwrite(&newEntry->type, sizeof(int), 1, fp);
fwrite(&newEntry->creation, sizeof(int), 1, fp);
fwrite(&newEntry->index, sizeof(int), 1, fp);
directoryTable[i] = *newEntry;
}
当我将directoryEntry-&gt; name的第一个字符分配给&#39; a&#39;时,我的意图实际上是为它分配值0x00,以便我稍后可以检查它是否为&#39; s空值。我只是使用权限进行调试。我的问题是当我读到它时,我什么也得不回来。
当我阅读时,我的代码如下:
fseek(fp, clusterSize * root, SEEK_SET);
for(int i = 0; i < clusterSize / 128; ++i){
directoryEntry * newEntry = (directoryEntry *) malloc(128);
newEntry->name = (char *) malloc(112);
fread(newEntry->name, 112, 1, fp);
write(1, newEntry->name[0],1);
fread(&newEntry->size, sizeof(int), 1, fp);
fread(&newEntry->type, sizeof(int), 1, fp);
fread(&newEntry->creation, sizeof(int), 1, fp);
fread(&newEntry->index, sizeof(int), 1, fp);
directoryTable[i] = *newEntry;
}
应该注意,也使用类似的方法读入clusterSize和root的值。我已经检查过了,在两种情况下它们的值都是准确的。由于我能够毫无问题地阅读这些内容,我不知道为什么我现在遇到这么大的问题。我觉得我对malloc的使用并不完全正确,我之前从未使用过它。
此外,如果需要,还有directoryTable的定义:
typedef struct{
char * name;
unsigned int index;
unsigned int size;
unsigned int type;
unsigned int creation;
} directoryEntry;
谢谢你们的时间,如果你需要我澄清任何我感到高兴的话。
答案 0 :(得分:2)
我看到很多小问题:
我不确定是否有任何这些导致您遇到的问题,顺便说一下您实际上没有指明,但它至少可以让您指向正确的方向。