📜  将结构读/写到C中的文件

📅  最后修改于: 2021-05-25 18:48:34             🧑  作者: Mango

先决条件:C语言中的结构

对于写入文件,使用fprintfputc可以很容易地将字符串或int写入文件,但是在写入struct的内容时可能会遇到困难。当您要写入和读取数据块时, fwritefread使任务变得更容易。

  1. fwrite:以下是fwrite函数的声明
    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
    ptr - This is pointer to array of elements to be written
    size -  This is the size in bytes of each element to be written
    nmemb - This is the number of elements, each one with a size of size bytes
    stream - This is the pointer to a FILE object that specifies an output stream
    
    // C program for writing 
    // struct to file
    #include 
    #include 
    #include 
      
    // a struct to read and write
    struct person 
    {
        int id;
        char fname[20];
        char lname[20];
    };
      
    int main ()
    {
        FILE *outfile;
          
        // open file for writing
        outfile = fopen ("person.dat", "w");
        if (outfile == NULL)
        {
            fprintf(stderr, "\nError opend file\n");
            exit (1);
        }
      
        struct person input1 = {1, "rohan", "sharma"};
        struct person input2 = {2, "mahendra", "dhoni"};
          
        // write struct to file
        fwrite (&input1, sizeof(struct person), 1, outfile);
        fwrite (&input2, sizeof(struct person), 1, outfile);
          
        if(fwrite != 0) 
            printf("contents to file written successfully !\n");
        else 
            printf("error writing file !\n");
      
        // close file
        fclose (outfile);
      
        return 0;
    }
    

    输出:

    gcc demowrite.c
    ./a.out
    contents to file written successfully!
    
  2. fread:以下是fread函数的声明
    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
    ptr - This is the pointer to a block of memory with a minimum size of size*nmemb bytes.
    size - This is the size in bytes of each element to be read.
    nmemb - This is the number of elements, each one with a size of size bytes.
    stream - This is the pointer to a FILE object that specifies an input stream.
    // C program for reading 
    // struct from a file
    #include 
    #include 
      
    // struct person with 3 fields
    struct person 
    {
        int id;
        char fname[20];
        char lname[20];
    };
      
    // Driver program
    int main ()
    {
        FILE *infile;
        struct person input;
          
        // Open person.dat for reading
        infile = fopen ("person.dat", "r");
        if (infile == NULL)
        {
            fprintf(stderr, "\nError opening file\n");
            exit (1);
        }
          
        // read file contents till end of file
        while(fread(&input, sizeof(struct person), 1, infile))
            printf ("id = %d name = %s %s\n", input.id,
            input.fname, input.lname);
      
        // close file
        fclose (infile);
      
        return 0;
    }
    

    输出:

    gcc demoread.c
    ./a.out
    id = 1   name = rohan sharma
    id = 2   name = mahendra dhoni
    
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。