C 从文件中的数据获取结构变量
我试图从文件中提取有关结构变量的信息 global.hC 从文件中的数据获取结构变量,c,file,C,File,我试图从文件中提取有关结构变量的信息 global.h // DEFINITION OF EACH DIRECTORY BLOCK - MUST FIT INSIDE A SINGLE BLOCK typedef struct { char name[SIFS_MAX_NAME_LENGTH]; time_t modtime; // time last modified <- time() uint32_t nentr
// DEFINITION OF EACH DIRECTORY BLOCK - MUST FIT INSIDE A SINGLE BLOCK
typedef struct {
char name[SIFS_MAX_NAME_LENGTH];
time_t modtime; // time last modified <- time()
uint32_t nentries;
struct {
SIFS_BLOCKID blockID; // of the entry's subdirectory or file
uint32_t fileindex; // into a SIFS_FILEBLOCK's filenames[]
} entries[SIFS_MAX_ENTRIES];
} SIFS_DIRBLOCK;
基本上,我希望能够提取有关
rootdir\u块的信息,这是一种结构。不知道怎么做。谢谢。您可以像读取二进制文件一样执行此操作。因此,在读取文件的部分,您将执行以下操作
/*Variabel来存储我们从文件中读取的数据*/
SIFS\u卷头数据;
/*我们以只读方式打开二进制文件*/
文件*fp=fopen(卷名,“rb”);
如果(fp!=NULL)
{
fseek(fp,sizeof header,SEEK_SET);
fread(表头数据),sizeof(表头数据),1,fp;
/*
验证读取是否成功,以及我们是否读取了正确的
数据量与我们预期的一样。
*/
}
在这里,我们假设您只保存了一个结构,而在文件中只保存了一个结构
警告:以这种方式在文件中存储结构可能不可移植,因此,如果您决定将结构存储在一个平台中,并在其他平台中读取它,则可能无法工作
咨询一些人。还要注意,如果您正在读取或写入二进制数据,则必须以二进制模式打开文件(将“b”添加到fopen
的openmode标志中)。
int SIFS_mkvolume(const char *volumename, size_t blocksize, uint32_t nblocks)
{
FILE *vol = fopen(volumename, "w");
// DEFINE AND INITIALISE VARIABLES FOR header, bitmap, and blocks
SIFS_VOLUME_HEADER header = {
.blocksize = blocksize,
.nblocks = nblocks,
};
SIFS_BIT bitmap[nblocks];
bitmap[SIFS_ROOTDIR_BLOCKID] = SIFS_DIR; // the root directory
for(int b=1 ; b<nblocks ; ++b) {
bitmap[b] = SIFS_UNUSED;
}
char oneblock[blocksize];
SIFS_DIRBLOCK rootdir_block;
memset(&rootdir_block, 0, sizeof rootdir_block); // cleared to all zeroes
rootdir_block.name[0] = '\0';
rootdir_block.modtime = time(NULL);
rootdir_block.nentries = 0;
memset(oneblock, 0, sizeof oneblock); // cleared to all zeroes
memcpy(oneblock, &rootdir_block, sizeof rootdir_block);
// WRITE ALL OF THE INITIALISED SECTIONS TO THE VOLUME
fwrite(&header, sizeof header, 1, vol);
fwrite(bitmap, sizeof bitmap, 1, vol);
fwrite(oneblock, sizeof oneblock, 1, vol); // write rootdir
memset(oneblock, 0, sizeof oneblock); // reset to all zeroes
for(int b=1 ; b<nblocks ; ++b) {
fwrite(oneblock, sizeof oneblock, 1, vol);
}
// FINISHED, CLOSE THE VOLUME
fclose(vol);
// AND RETURN INDICATING SUCCESS
return 0;
}
FILE *fp = fopen(volumename, "r+");
if(fp != NULL){
fseek(fp,sizeof header,SEEK_SET);
fread(//not sure what to do here);
}