c - C 中的 .dat 结构化文件处理(手动?)

标签 c

您好,我只是想问一下我们在哪里可以找到有关 C 而不是 C++ 中的 .dat 文件处理的相关手册。我在谷歌上搜索了很多时间。所以我来是因为我知道这里有很多专家。

希望你能帮我。

即使只是一个简单的读取、编辑、添加和删除的例子。 (增删改查)

哇,谢谢您的回答,但是我尝试保存和检索数据。 它在保存过程中没有给我正确的数据。

  1. 我在文件中写入了数据。

    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;
}
  1. 从文件中检索数据。

    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/

相关文章:

c - 我应该使用哪个编译标志 -> Os 或 O2?

c - strlen 对于两字节字符串显示 0

c++ - C 'switch' 用法?

c - gethostbyname - h_addr_list 第一位不正确

c - 使用边界条件导航映射到 1D 的 2D 数组

c - 在没有外部 DLL 的情况下用 C 语言的 PGP 公钥加密字符串?

c - scanf 终止标准输入

C:使用 mknod() 创建命名管道不起作用

c - gcc/usr/bin/ld : error: cannot find -lncurses

c - C中使用指针从字符串中提取子字符串