精华内容
下载资源
问答
  • 二进制文件:用专门的程序以二进制形式写入的文件,所有文件的最终形式都是二进制文件文件路径绝对路径:绝对是相对于根目录,一开始加/就是代表根目录,对任意文件右击属性即可查看文件绝对路径相对路径:相对于...
    9563a659e6522ca464d527ca1417fc5b.gif

    C语言文件读写

    c516a9a3d4eaca60c37e339dee784469.png

    文件类型

    • 文本文件:我们日常使用的文件绝大多数是文本文件,人是能够看懂文件相关信息。

    • 二进制文件:用专门的程序以二进制形式写入的文件,所有文件的最终形式都是二进制文件

    文件路径
    • 绝对路径:绝对是相对于根目录,一开始加/就是代表根目录,对任意文件右击属性即可查看文件绝对路径

    • 相对路径:相对于当前页面位置的路径。./:是代表当前位置,../是代表上一级位置。

    文件操作函数e74baf2dc16d27777bce0c3200835d35.png

    打开文件函数

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

    • 参数1:文件路径

    • 参数2:文件打开模式

    函数执行成功返回文件流指针,错误返回NULL

    标准语句

    4af367d331f2a72a0b2ffbd301967951.png

    文件打开方式

    cfba1d92e49bd4d56f1e059dcce76158.png

    关闭文件函数

    int  fclose(FILE  *fp);

    • 参数:文件流

    文件写入函数
    • 字符写入:int  fputc(int  c,FILE  *stream);

      参数1:写入的字符

      参数2:文件流

    将单个字符写入到文件中,成功时,返回写入字符ASCII码值,错误返回EOF(-1)

    • 字符串写入:int  fputs(const  char  *s,FILE  *stream);

      参数1:写入的字符串

      参数2:文件流

    将字符串写入文件中,成功时返回一个非负值,错误时返回EOF(-1)

    • 格式化写入:int fprintf(FILE *stream,const char *foramt,...);

      参数1:目标文件指针

      参数2:指定格式控制字符串

      参数3:各种输出项

    用来将输出项按指定的格式写入到指定文本文件中

    2.关系运算符

    • 字符读取:int fgetc(FILE *stream);

    • 字符串读取:char *fgets(char *buf,int bufsize,FILE *stream);

    • 格式化读取:int fscanf(FILE *stream,const char *format,..);

    二进制文件读写

    0dddfc717cd85323c169bafbb4a030c9.png

    二进制文件读写一般是通过对结构变量的操作进行的,nitem用来说明这次读写几个变量

    文件定位

    04e7a8a8d017a0dd499abdafc06d24e8.pngcaa0eadff79d6adb6256b3ec53e5a649.gif

    上期C语言结构类型,点击跳转

    未完待续1c99f0b9782edbfaf513252e953705d7.gif

    编辑:初始化

    部分图片来源:网络

    9978d7c30151172ff5ed74e19d5e6ae6.png

    微信号 : youngster1314

    ● 扫码关注我们

    展开全文
  • fopen,fread,fwrite:二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中 #include <stdio.h> #include <stdlib.h> #define MAXLEN 1024 int...

    fopen,fread,fwrite:二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXLEN 1024
    
    int main(int argc, char *argv[])
    
    {
        FILE * outfile, *infile;
    
        outfile = fopen(argv[2], "wb" );
    
        infile = fopen(argv[1], "rb");
    
        unsigned char buf[MAXLEN];
    
        if( outfile == NULL || infile == NULL )
    
        {
    
            printf("%s, %s",argv[1],"not exit/n");
    
            exit(1);
    
        }   
    
       
    
        int rc;
    
        while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 )
    
        {
    
            fwrite( buf, sizeof( unsigned char ), rc, outfile );
    
    } 
    
    fclose(infile);
    
    fclose(outfile);
    
     system("PAUSE"); 
    
     return 0;
    
    }
    
    展开全文
  • 文章先介绍函数,我们一共要用到三个函数,fopen,fread,fwrite。二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。
  • 二进制文件读写(C语言,C++)

    千次阅读 2012-07-24 10:09:23
    二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码: ( Copy.c ) #include #include stdlib.h> #define MAXLEN ...

    首先是用C语言实现:

    我们一共要用到三个函数,fopen,fread,fwrite。二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码:  ( Copy.c )

    #include <stdio.h>

    #include <stdlib.h>

    #define MAXLEN  1024

    int main(int argc, char *argv[]){

          if ( argc < 3 ) {

                   printf("usage: %s %s/n", argv[0], "infile outfile");

                  exit(1);

          }

           FILE * outfile, *infile;

           outfile = fopen(argv[2], "wb" );

           infile = fopen(argv[1], "rb");

           unsigned char buf[MAXLEN];

           if( outfile == NULL || infile == NULL ) {

                   printf("%s, %s", argv[1], "not exit/n");

                   exit(1);

           }   

          int rc;

           while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 )  {

                   fwrite( buf, sizeof( unsigned char ), rc, outfile ); 

            

    fclose(infile);

    fclose(outfile);

           system("PAUSE"); 

           return 0;

    }
    现在来讲讲这个程序,这个程序的作用就是将文件1的内容直接拷贝到文件2中,注意fread的返回值,这个值需要在fwrite的时候将会用到。

    后面是关于fopen,fread,fwrite三个函数的详细说明。

    fopen(打开文件)

    相关函数
    open,fclose
    表头文件
    #include<stdio.h>
    定义函数
    FILE * fopen(const char * path, const char * mode);
    函数说明
    参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
    mode有下列几种形态字符串:
    r : 打开只读文件,该文件必须存在。
    r+ : 打开可读写的文件,该文件必须存在。
    w  : 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
    w+ : 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
    a  : 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
    a+ : 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
    上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
    返回值
    文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。
    附加说明
    一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。
    范例
    #include<stdio.h>
    main()
    {
          FILE * fp;
          fp=fopen("noexist", "a+");
          if( fp == NULL) return;
          fclose(fp);
    }

    fread(从文件流读取数据)

    相关函数
    fopen,fwrite,fseek,fscanf
    表头文件
    #include<stdio.h>
    定义函数
    size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);
    函数说明
    fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。
    返回值
    返回实际读取到的nmemb数目。
    附加说明

     
    范例
    #include<stdio.h>
    #define nmemb 3
    struct test
    {
          char name[20];
          int size;
    }s[nmemb];

    main()
    {
          FILE * stream;
          int i;
          stream = fopen("/tmp/fwrite", "r");
          fread(s, sizeof(struct test), nmemb, stream);
          fclose(stream);
          for(i=0; i<nmemb; i++)
                printf("name[%d]=%-20s:size[%d]=%d/n", i, s[i].name, i, s[i].size);
    }
    执行
    name[0]=Linux!  size[0]=6
    name[1]=FreeBSD!  size[1]=8
    name[2]=Windows2000  size[2]=11

    fwrite(将数据写至文件流)

    相关函数
    fopen,fread,fseek,fscanf
    表头文件
    #include<stdio.h>
    定义函数
    size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);
    函数说明
    fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。
    返回值
    返回实际写入的nmemb数目。
    范例
    #include<stdio.h>
    #define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
    #define nmemb 3
    struct test
    {
          char name[20];
          int size;
    }s[nmemb]; 
    main()
    {
          FILE * stream;
          set_s(0, "Linux!");
          set_s(1, "FreeBSD!");
          set_s(2, "Windows2000.");
          stream=fopen("/tmp/fwrite", "w");
          fwrite(s, sizeof(struct test), nmemb, stream);
          fclose(stream);
    }
    执行
    参考fread()。



     
     

    下面是用C++实现二进制文件的读写:

    本文读写文件均使用文件流进行操作,主要使用的类是ifstream, ofstream, 使用时,请务必包含文件fstream。如下:

    #include <fstream>

     

    写二进制文件:

     

    写二进制文件应该使用ofstream类,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

    下面是示例代码,用于写入文件。

    std::ofstream fout("a.dat", std::ios::binary);

    int nNum = 20;

    std::string str("Hello, world");

    fout.write((char*)&nNum, sizeof(int));

    fout.write(str.c_str(), sizeof(char) * (str.size()));

    fout.close();

    而写文本文件则比较简单,如下:

    std::ofstream fout("b.dat");

    int nNum = 20;

    std::string str("Hello, world");

    fout << nNum << "," << str << std::endl;

    fout.close();

     

    读二进制文件:

     

    读取二进制文件可以使用ifstream 类来进行,文件的打开模式一定要是 binary,如果传入的不是 binary, 文件将以ASCII方式打开。

    下面是示例代码:

    std::ifstream fin("a.dat", std::ios::binary);

    int nNum;

    char szBuf[256] = {0};

    fin.read((char*)&nNum, sizeof(int));

    fin.read(szBuf, sizeof(char) * 256);

    std::cout << "int = " << nNum << std::endl;

    std::cout << "str = " << szBuf << std::endl;

    fin.close();

    而读取文本文件则比较简单:

    std::ifstream fin("b.dat");

    int nNum;

    char szBuf[256] = {0};

    fin >> nNum >> szBuf;

    std::cout << "int = " << nNum << std::endl;

    std::cout << "str = " << szBuf << std::endl;

    fin.close();

     

    文件的打开模式:

     

    文件操作时,如果不显示指定打开模式,文件流类将使用默认值。

    在<fstream> 中定义了如下打开模式和文件属性:

    ios::app  // 从后面添加

    ios::ate  // 打开并找到文件尾

    ios::binary  // 二进制模式I/O(与文本模式相对)

    ios::in  // 只读打开

    ios::out  // 写打开

    ios::trunc  // 将文件截为 0 长度

    可以使用位操作符 OR 组合这些标志,比如

    ofstream logFile("log.dat", ios::binary | ios::app);

     

    二进制文件的复制:

     

    这里我实现了一个二进制文件的复制操作,用于验证读写的正确性,示例代码如下:

    后记

    由于文本文件本质上也是磁盘上的一个个二进制编码,因此,读写二进制文件的代码同样可以读写文本文件,在文件类型不是很明确的读写操作中,直接使用二进制读写比较可取,如果可以直接判断文件类型,则可以分别对待。

    关于读取文本文件,请参照http://blog.csdn.net/lightlater/archive/2011/04/15/6326338.aspx


     

     

     

     

    展开全文
  • C语言二进制方式读写文件数据

    万次阅读 多人点赞 2018-12-12 06:35:40
    fwrite(buffer, size, count,fp):以二进制的形式向指定的文件中写入若干数据项(由count决定),返回实际写入的数据项数目,各参数含义如下: buffer:一个存储区的起始地址,以该地址开始的存储区的数据即是保存...

    fwrite(buffer, size, count,fp):以二进制的形式向指定的文件中写入若干数据项(由count决定),返回实际写入的数据项数目,各参数含义如下:

    buffer:一个存储区的起始地址,以该地址开始的存储区的数据即是保存到文件中的数据,可以是数组或指针类型;

    size:单个数据项的大小(单位:字节);

    count:数据项数量;

    fp:FILE类型指针,该指针对应的文件即是数据保存的“目的地”;

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        struct Student{
            char name [10];
            int num;
            int age;
            char addr [30];
        } stud [10];
    
        FILE * output  = fopen("D:\\stud.dat","wb");//生成的stud.dat文件无法用记事本打开,打开后显示“乱码”。
    
        if(output == NULL){
            printf("无法打开文件");
            exit(0);
        }
    
        for(int i=0;i<10;++i){
            scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
            fwrite(&stud[i],sizeof(struct Student),1,output);
        }
        fclose(output);
        return 0;
    }

    fread(buffer, size, count,fp):以二进制的形式从指定的文件中读取若干数据项(由count决定),调用成功返回实际读取到的数据项个数(小于或等于count),不成功或读到文件末尾返回 0,各参数含义如下:

    buffer:一个存储区的起始地址,以该地址开始的存储区用于保存从文件中读取出来的数据,可以是数组或指针类型;

    size:单个数据项的大小(单位:字节);

    count:数据项数量;

    fp:FILE类型指针,该指针对应的文件即是数据的“来源地”;

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        struct Student{
            char name [10];
            int num;
            int age;
            char addr [30];
        } stud [10];
    
        FILE * input = fopen("D:\\stud.dat","rb");
    
        if(input == NULL){
            printf("无法打开文件");
            exit(0);
        }
    
        for(int i=0;i<10;++i){
            fread(&stud[i],sizeof(struct Student),1/*读取1个数据项*/,input);
            printf("%s %d %d %s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
        }
        fclose(input);
        return 0;
    }
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        struct Student{
            char name [10];
            int num;
            int age;
            char addr [30];
        } stud [5];
    
        FILE * input = fopen("D:\\stud.dat","rb");
    
        if(input == NULL){
            printf("无法打开文件");
            exit(0);
        }
    
        int validCount;//实际读取多少数据项
        while((validCount = fread(stud,sizeof(struct Student),5/*最多读取5个数据项*/,input))!=0){
            for(int i=0;i<validCount;++i){
                printf("%s %d %d %s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
            }
        }
    
        fclose(input);
        return 0;
    }

     

    展开全文
  • C语言实现二进制文件读写

    千次阅读 2013-12-12 15:31:29
    C语言实现二进制文件读写(转载) ...二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码: Copy.c
  • C语言读写文件二进制文件

    千次阅读 2017-08-26 16:24:56
    读写文件有“w”和“wb”格式,分别是以文本形式读写和以二进制形式读写。 1、文本方式读取要把回车,换行两个字符变成一个字符,相当于截短了文件。 2、文本形式和二进制形式适用的结束符和读写函数不同。尤其是...
  • C语言下的二进制文件读写 ...在现实情况下文件都是以二进制进行存储的,每次都用一个char 类型的变量不断读取二进制文件,如果遇到一个1111 1111B的话,就 会被解析成EOF,也就是文件终止符号,此时后面的文件流就不会
  • 二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码:  Copy.c: #include <stdio.h> #include ...
  • C语言实现二进制文件读写(转载)

    千次阅读 2014-01-02 11:04:51
    C语言实现二进制文件读写(转载) 文件的读写是挺基础,...二进制读写的顺序是用fopen以二进制方式打开读写文件,然后使用fread和fwrite两个函数将数据写入二进制文件中。下面我们看看一个拷贝程序的源码: Copy.c:
  • c语言读写二进制文件

    2020-04-01 21:39:11
    fread()(读) #include <stdio.h> size_t fread(void*ptr,size_t size,size_t nmemb,FILE*stream);...size:size_t为unsigned int 类型,此参数指定读取文件内容的块数据大小 nmemb:读取文...
  • 用格式化和二进制方式读写文件 1.用格式化方式读写文本文件 大家已经熟悉的用printf函数和scanf函数向终端进行格式化的输入输出,即用各种不同的格式终端为对象输入输出数据。其实文件也能进行格式化输入输出。...
  • C语言可以用fread函数从...以二进制的形式。 fread(buffer ,size,count,fp); fwrite(buffer ,size,count,fp); 现在有一个结构体 struct Student{...........} student1;想将它写入磁盘上保存下来。 有一个data....
  • fseek与C语言二进制文件读写实例

    千次阅读 2011-01-22 16:08:00
    fseek  函数名: ...如果执行成功,stream将指向fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。  返回值: 成功,返回0,否则
  • 内存中的字符或字符串都是文本模式(unicode编码存储,统一长度,定长码,方便)内存中的其他变量都是以二进制编码存储程序的代码以文本模式ASCII码方式存储 1.在windows系统中,文本模式下,文件以" \r\n"代表换行...
  • C/C++:文本文件二进制文件读写

    万次阅读 2018-02-28 15:47:42
    C语言中,对于文本文件二进制文件读写,应该如何进行呢?如何把数据保存为.txt文件?如何读取.txt文件中的数据?本经验主要包括以下几部分:1、C++基础:数据流,缓冲区,文件类型2、C语言:缓冲区文件处理:3...
  • 我觉得,对于编程人员,文本文件二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件读写函数),怎么判断读到这个文件结尾。 具体的说: 1。哪种...
  • //rb+打开二进制文本文件,允许读写,若不存在返回空 //wb+新建二进制文本文件,允许读写。如果文件存在则删除文件重建 } printf("请依次输入如下数据,课程名,授课老师,教室位置,开课时间(xx月xx日xx:xx...
  • 对于编程人员来说,文本文件二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾等。 具体分析如下: 一、哪种方式...
  • 我觉得,对于编程人员,文本文件二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件读写函数),怎么判断读到这个文件结尾。 具体的说: 1...
  • 1.DOS和Windows系统使用CRLF(0x0D 0x0A)即\r\n双字节作为文本文件换行符,而Unix文本文件的换行符只有一个字节LF(0x0A)为。在C语言中,也是LF即’\n’为换行符。由于DOS/Windows定义的换行符和C语言的...2.二进制...
  • 对于程序来说,不管后缀名如何,文件分为两种类型:文本文件二进制文件C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。 2、fopen的函数原型:FILE * ...
  • ’\0’,’\n’等都是文本文件的重要标识,而二进制文件,则往往块的形式,写入或读出。   而所有的二进制接口对于这些标识,是不敏感的。 fwrite/fread 试读文本文件   当我们试图用 fread 去读取文本文件...
  • 我觉得,对于编程人员,文本文件二进制文件就是一个声明,指明了你应该什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件读写函数),怎么判断读到这个文件结尾。 具体的说: 1。哪种...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 196
精华内容 78
关键字:

以二进制读写文件c语言

c语言 订阅