CC++文件操作-文件概念以及文件写入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CC++文件操作-文件概念以及文件写入相关的知识,希望对你有一定的参考价值。

      文件用于持久地保存数据

      持久:断电后数据不消失。下次加点,可以读取

      文件的属性:

      文件名

      路径

      长度(已字节单位计算)

      内容

      只读/读写

      fopen  打开一个文件

      fclose  关闭文件

      fwrite  写入数据

      fread   关闭文件

     保存数据到文件的步骤

     1) fopen 打开文件

     FILE *fopen (const char * filename , const char * mode);

     mode  使用wb,写入二进制

     2) fwrite 写入数据

     size_t fwrite(const void * buf , size_t size , size_t count, FILE * stream);

     buf要写入的数据

     size总是1

     count 长度

     stream fopen创建的指针

     3) fclose 关闭文件

     简单的写入数据例子

#include <stdio.h>

int main()
{
    //定义文件名 
    const char * filename = "c:/aaa.txt";
    //打开文件 ,系统会根据指定的路劲和文件名创建文件 
    FILE * fp = fopen(filename , "wb");
    //判断文件指针是否为空来判断文件是否创建成功 
    if(fp == NULL)
    {
        printf("failed to open file!\n");
        return -1;
    }
      
    char buf[] = "hello";
    
    //写入数据 
    fwrite(buf , 1 , 5 , fp);
    
    int a = 0x12345678;
    fwrite(&a,1,4,fp);
     
    fclose(fp);
    
    return 0;
}
  

    写入数据详解

    一.写入一个数组的数据

    代码如下

    

#include <stdio.h>
#include <string.h>

int main()
{
    //定义文件名 
    const char * filename = "c:/aaa.txt";
    //打开文件 ,系统会根据指定的路劲和文件名创建文件 
    FILE * fp = fopen(filename , "wb");
    //判断文件指针是否为空来判断文件是否创建成功 
    if(fp == NULL)
    {
        printf("failed to open file!\n");
        return -1;
    }
      

    int buf[4] = {0xA001 , 0xB002, 0xC003 , 0xD004};
for(int i = 0; i < 4 ; i++) { char text[16]; //把int类型数据转换为字符型 sprintf(text , "%d," , buf[i]); fwrite(text,1,strlen(text),fp); } fclose(fp); return 0; }

     

    二. 指定格式保存小数

 

#include <stdio.h>
#include <string.h>

int main()
{
    //定义文件名 
    const char * filename = "c:/aaa.txt";
    //打开文件 ,系统会根据指定的路劲和文件名创建文件 
    FILE * fp = fopen(filename , "wb");
    //判断文件指针是否为空来判断文件是否创建成功 
    if(fp == NULL)
    {
        printf("failed to open file!\n");
        return -1;
    }
      
   double a = 3 / 4.0;
   
   char text[16];
   //保留两位小数 
   sprintf(text,"%.2lf",a);
   fwrite(text , 1 , strlen(text) , fp); 

      fclose(fp);
    
    return 0;
}

   三.写入字符串

  字符串的两种存储方式

  char buf [16] = "hello" ;

  方式1:按实际有效长度存储(使用string.h里面的strlen函数得到字符串具体长度)

  fwrite(buf , 1 , strlen(buf) , fp);

  方式2:按固定长度写入

  fwrite(buf , 1 , 16 , fp);

  (占用空间多)

#include <stdio.h>
#include <string.h>

int main()
{
    //定义文件名 
    const char * filename = "c:/aaa.txt";
    //打开文件 ,系统会根据指定的路劲和文件名创建文件 
    FILE * fp = fopen(filename , "wb");
    //判断文件指针是否为空来判断文件是否创建成功 
    if(fp == NULL)
    {
        printf("failed to open file!\n");
        return -1;
    }

    char buf[16] = "hello";  
//    fwrite(buf,1,strlen(buf),fp);
  fwrite(buf,1,16,fp); 
return 0;

}

 

四.写入结构体

#include <stdio.h>
#include <string.h>

struct Student{
    int id ;
    char gender;
    char name[16];
};

int main()
{
    //定义文件名 
    const char * filename = "c:/aaa.txt";
    //打开文件 ,系统会根据指定的路劲和文件名创建文件 
    FILE * fp = fopen(filename , "wb");
    //判断文件指针是否为空来判断文件是否创建成功 
    if(fp == NULL)
    {
        printf("failed to open file!\n");
        return -1;
    }

    Student someone = {61031 , M ,"Noname"};
   
  //  fwrite(&someone , 1 , sizeof(someone) , fp);
    
    fwrite(&someone.gender,1,1,fp);
    fwrite(&someone.id,1,4,fp);
    fwrite(&someone.gender,1,16,fp);
        
    fclose(fp);
    return 0;
}

 

  fopen(filename , "wb");

  参数为wb时,内容会覆盖

  参数为ab时,写入的内容会追加在后面

 

 

  

 

以上是关于CC++文件操作-文件概念以及文件写入的主要内容,如果未能解决你的问题,请参考以下文章

文件的操作以及修改当前操作的路径

C++ 如何将一个文件里的数据写入到另一个文件里?

Python3 关于excel 文件格式xls之读取写入和追加

php将数组元素按行写入文本文件

Parquet文件是怎么被写入的-Row Groups,Pages,需要的内存,以及flush操作

python中文件的读取与写入以及os模块