c - 从文件中的数据中获取结构变量
问题描述
我正在尝试从文件中提取有关结构变量的信息。
全局.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 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;
文件1.c
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;
}
如果我想访问结构的信息,rootdir_block
我该怎么做?
我试过这个:
文件2.c
FILE *fp = fopen(volumename, "r+");
if(fp != NULL){
fseek(fp,sizeof header,SEEK_SET);
fread(//not sure what to do here);
}
基本上,我希望能够提取关于rootdir_block
哪个是结构的信息。不知道该怎么做。谢谢。
解决方案
您会像在读取二进制文件一样执行此操作。因此,在您正在读取文件的部分,您将执行以下操作
/* Variabel to store the data we read from the file */
SIFS_VOLUME_HEADER header_data;
/* We open the binary file for read only */
FILE *fp = fopen(volumename, "rb");
if(fp != NULL)
{
fseek(fp,sizeof header,SEEK_SET);
fread(header_data, sizeof(header_data), 1, fp);
/*
Verify if the read was successful and we read the correct
amount of data as we expected.
*/
}
在这里,我们假设您只保存了1 个结构,文件中没有其他内容。
警告:以这种方式将结构存储在文件中可能无法移植,因此如果您决定将结构存储在一个平台上并在其他平台上读取它,它可能无法正常工作。
推荐阅读
- vim - TypeScript 文件在缩进时被视为 xml
- java - Java:如何将不包含空格的字符表示为单词?
- android - 使用意图从类向 MainActivity 发送数据时出错
- c# - 如何在一台 Windows 服务器上运行多个 asp.net core MQTT 代理?
- winapi - MFC:从控件本身的代码限制子控件的大小
- chocolatey - 创建 Chocolatey 包并多次执行安装
- java - 如何为井字游戏创建简单、中等和困难级别?
- python - Python“SyntaxError:无效语法”,我不知道为什么
- python - 我在 Python 中的范围有问题,变量声明为全局但仍然出错
- html - 设置背景图像以填充整个窗口