您好,我只是想问一下我们在哪里可以找到有关 C 而不是 C++ 中的 .dat 文件处理的相关手册。我在谷歌上搜索了很多时间。所以我来是因为我知道这里有很多专家。
希望你能帮我。
即使只是一个简单的读取、编辑、添加和删除的例子。 (增删改查)
哇,谢谢您的回答,但是我尝试保存和检索数据。 它在保存过程中没有给我正确的数据。
我在文件中写入了数据。
typedef struct{ char name[50]; int age; } PERSON;
int main(){
PERSON p;
FILE *f;
strcpy(p.name,"John");
p.age = 25;
f = fopen("test.dat","wb+");
fwrite(&p,1,sizeof(p),f);
fclose(f);
return 0;
}
从文件中检索数据。
typedef struct{ char name[50]; int age;
} 人;
int main() { 人 p; 文件 *f;
f = fopen("comets$system:test.dat","wb+");
fread(p,sizeof(p),1,f);
fclose(f);
printf("此人的姓名是 %s",&p.name);
返回0; }
但输出是这样的
Name from the person is Ëz
最佳答案
假设您的数据项由固定大小的 C 结构描述,其类型定义如下:
typedef struct
{
... // fill in the missing details
} MyDataItem;
并且您的数据文件由这些 MyDataItem 组成...
使用 fopen(FileName, "wb")
创建一个空文件,以便将 MyDataItem 写入其中(如果在此调用之前存在同名文件,则该文件将被覆盖并且所有其中的数据将会丢失)。
使用fopen(FileName, "rb")
打开现有文件以供只读。
使用fopen(FileName, "rb+")
打开现有文件进行读取或写入/更新。
使用 fopen(FileName, "wb+")
创建一个新文件以用于写入/更新或读取(如果在此调用之前存在同名文件,则该文件将被覆盖并其中的所有数据都将丢失)。
使用fopen(FileName, "ab")
打开现有文件或创建一个新文件以在其末尾附加数据。
使用fopen(FileName, "ab+")
打开现有文件或创建一个新文件,以便在其末尾附加数据并读取/写入/更新它。
使用完之前打开的文件后,使用 fclose(FileStreamPointer)
关闭该文件。
使用 fseek(FileStreamPointer, StructureIndex*sizeof(MyDataItem), SEEK_SET)
准备在现有且打开的文件中读取或(覆盖)写入 StructureIndex 的 MyDataItem。这设置当前文件的读/写位置。请注意,fread() 和 fwrite() 是从文件读取数据或向文件写入数据的函数,它们将当前位置提前读取/写入数据的量。
使用 fread(PointerToMyDataItemStructure, 1, sizeof(MyDataItem), FileStreamPointer)
读取 MyDataItem。
使用fwrite(PointerToMyDataItemStructure, 1, sizeof(MyDataItem), FileStreamPointer)
写入MyDataItem。
使用fstat()
或stat()
来找出文件的大小。这些不是 C 中的标准,它们是扩展(POSIX 或其他)。
删除文件末尾的MyDataItem可以通过调用ftruncate()
、truncate()
和类似函数来实现,但它们在C中不是标准的,它们是扩展(POSIX 或其他)。
没有标准/通用函数可以删除文件开头或中间某处的一部分。您必须创建一个新文件并仅将您想要保留的数据复制/写入其中(然后删除旧文件并可能重命名新文件)或从您想要的部分之后复制文件中的数据使用 fread() 和 fwrite() 删除已删除的部分,然后截断文件。
使用remove()
删除文件。
使用rename()
重命名文件。
使用tmpnam()
+fopen()
或tmpfile()
创建临时文件。
您的操作系统可能会为文件 I/O 提供其他有用的功能。
有关详细信息,请参阅文档。
关于c - C 中的 .dat 结构化文件处理(手动?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7817485/