因此,出于某种原因,我需要通过将新文件附加到旧数据的末尾来创建一个外部文件 (.DAT) 来存储数据。
#include <stdio.h>
#include <stdlib.h>
int main () {
typedef struct {
char *Name;
int Index;
} DataFile;
static FILE *file;
size_t result;
DataFile *DataTable;
file = fopen("database.DAT","ab");
DataTable = (DataFile *) malloc (sizeof(DataFile));
DataTable[0].Name = "somefile.txt";
DataTable[0].Index = 7;
printf("%s %d \n",DataTable[0].Name,DataTable[0].Index);
result = fwrite(DataTable,sizeof(DataFile),1,file);
fclose(file);
free(DataTable);
return 0;
}
运行上面的代码后,我检查数据是否存储正确。所以,我在下面做这个代码。
#include <stdio.h>
#include <stdlib.h>
int main () {
typedef struct {
char *Name;
int Index;
} DataFile;
static FILE *file;
size_t result;
long size;
int i;
DataFile *DataTable;
file = fopen("database.DAT","rb");
if (file == NULL) printf("Error1");
// Determine the size of file
fseek(file,0,SEEK_END);
size = ftell(file);
rewind(file);
DataTable = (DataFile *) malloc ((size/sizeof(DataFile)) * sizeof(DataFile));
if (DataTable == NULL) printf("Error2");
result = fread(DataTable,sizeof(DataFile),size/sizeof(DataFile),file);
fclose(file);
for (i=0; i<result; i++) {
printf("%s %d \n",DataTable[i].Name,DataTable[i].Index);
}
free(DataTable);
return 0;
}
但是,它给出了输出
somefile.txt 7
从第一个代码块和
Error1 7
从第二个代码块。我注意到问题不是因为打开 .DAT 文件或为 DataTable 分配内存时失败。此外,从 .DAT 文件读取时,它适用于 int 类型(索引),但不适用于 char* 类型(名称)。我不知道如何解决这个 char*-type-reading 问题(以及 'error1' 的来源)。(甚至谷歌都没有给我答案。)