精华内容
下载资源
问答
  • C语言 文件操作的头文件

    千次阅读 2019-05-02 22:31:00
    在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作,C语言规定该文件指针类型为FILE型。文件的信息有这个FILE型的结构体来进行定义。 FILE的结构体的定义...

     

     

    计算机文件是以计算机硬盘为载体存储在计算机上的信息集合,是存储在某种长期储存设备上的一段数据流。在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作,C语言规定该文件指针类型为FILE型。文件的信息有这个FILE型的结构体来进行定义。

    FILE的结构体的定义如下

    typedef struct
    {
        short level;            // 缓冲区“满”或“空”的程度
        unsigned flags;         // 文件状态标志
        char fd;                // 文件描述符
        unsigned char hold;     // 如缓冲区无内容不读取字符
        short bsize;            // 缓冲区的大小
        unsigned char *buffer;  // 数据缓冲区的位置
        unsigned ar *curp;      // 指针当前的指向
        unsigned istemp;        // 临时文件指示器
        short token;            // 用于有效性检查
    }FILE;

    例如我们定义一个文件指针:FILE *fp;    fp指向某一个文件的文件信息区(是一个结构体变量),通过该文件信息区就能够访问该文件。如下图所示: 

    文件缓冲区:缓冲文件系统是指系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘中去。

    文件的打开(fopen函数)

    函数调用:

    FILE *fp;

    fp = fopen(文件名,使用文件方式);

     

    注意:

    需要打开的文件名,也就是准备访问的文件的名字

    使用文件的方式(“读”还是“写”等);

    让哪一个指针变量指向被打开的文件。

     

     

    文件使用方式    

     含   义

    -------------------------------------------------------------------------------------

    “r” (只读)为输入打开一个文本文件

    “w” (只写)为输出打开一个文本文件

    “a” (追加)向文本文件尾增加数据(以ascll码的形式追加)

    “rb” (只读)为输入打开一个二进制文件

    “wb” (只写)为输出打开一个二进制文件

    "ab“ (追加)向二进制文件尾增加数据(以二进制的形式追加)

    "r+“ (读写)为读/写打开一个文本文件

    "w+” (读写)为读/写建立一个新的文本文件

    "a+” (读写)为读/写打开一个文本文件

    "rb+“ (读写)为读/写打开一个二进制文件

    “wb+“ (读写)为读/写建立一个新的二进制文件

    “ab+” (读写)为读/写打开一个二进制文件

    -------------------------------------------------------------------------------------

    几点注意:

    凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

    文件若不存在发生错误。

     

    用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

    若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。

     

    在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。

     

    在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。

     

    把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。

     

    fclose 函数说明:

    作用:关闭一个文件流,释放文件指针

    格式:int fclose( FILE *fp );

    返回值:如果流成功关闭,fclose 返回 0,否则返回EOF

    参数说明:

        *fp:需要关闭的文件指针

    注:在文件操作完成后我们应该调用该函数来关闭文件,如果不关闭文件将可能会丢失数据。因为在向文件写入数据时会先将数据输出到缓冲区,待缓冲区充满后才正式输出给文件。 

    三、顺序读写数据文件

    fgetc 函数说明:

    作用:从文件指针指向的文件流中读取一个字符,读取一个字节后,光标位置后移一个字节

    格式:int fgetc(FILE *stream);

    返回值:返回所读取的一个字节,如果读到文件末尾或者读取出错时返回EOF(EOF是文件结束标识符,一般值为-1)

    参数说明:

        *stream:文件指针,从该文件指针指向的文件中读取一个字符,然后将光标后移一个字节

     

    fputc 函数说明:

    作用:将指定字符写到文件指针所指向的文件的当前写指针位置上

    格式:int fputc (char c, File *fp);

    返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF

    参数说明:

        c:需要写入的字符

        *fp:文件指针,在当前文件指针所指向的文件的当前写指针位置上写入一个字符c,然后文件内部写指针会自动后移一个字节位置

     

    fgets 函数说明:

    作用:从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。

    格式:char *fgets(char *buf, int bufsize, FILE *stream);

    返回值:函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

    参数说明:

        *buf: 字符型指针,指向用来存储所得数据的地址。  

        bufsize: 整型数据,指明存储数据的大小。  

        *stream: 文件指针,将要读取的文件流。

     

    fputs 函数说明:

    作用:向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)

    格式:int fputs(char *str, FILE *fp);

    返回值:若成功返回0,失败返回EOF

    参数说明:

        *str: 需要写入的字符串   

        *fp: 文件指针,将要写入的文件流

     

    fprintf 函数说明:

    作用:格式化后输出到文件中

    格式:int fprintf (FILE*  stream, const char*  format, [argument]);

    返回值:若成功返回值是输出的字符数,当发生错误时返回一个负值

    参数说明:

        *stream:文件指针

        *format:输出格式

        [argument]:附加参数列表

    注:用法与printf函数类似,这里只是参数多了一个文件指针,将格式后的结果输出到文件中

     

    fscanf 函数说明:

    作用:从一个流中执行格式化输入

    格式:int fscanf(FILE* stream,constchar* format,[argument]);

    返回值:成功返回读入的参数的个数,失败返回EOF。

    参数说明:

        *stream:文件指针

        *format:格式字符串

        [argument]:输入列表

    注:用法与scanf函数类似

     

    fread 函数说明:

    作用:从一个文件流中读数据,最多读取count个元素,每个元素size字节

    格式:size_t fread ( void *buffer, size_t  size, size_t  count, FILE *stream) ;

    返回值:如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回0

    参数说明:

        *buffer:用于接收数据的内存地址

        size:要读的每个数据项的字节数,单位是字节

        count:要读count个数据项,每个数据项size个字节

        *stream:文件指针
    注:这个函数以二进制形式对文件进行操作,不局限于文本文件 

     

    fwrite 函数说明:

    作用:向文件写入一个数据块

    格式:size_t fwrite(const void* buffer, size_t  size, size_t  count, FILE* stream);

    返回值:返回实际写入的数据块数目

    参数说明:

        *buffer:待写入的数据的内存地址

        size:要写入内容的单字节数

        count:要进行写入size字节的数据项的个数

        *stream:文件指针

    注:这个函数以二进制形式对文件进行操作,不局限于文本文件 

     

    四、随机读写数据文件

    rewind 函数说明:

    作用:将文件内部的位置指针重新指向一个流(数据流/文件)的开头

    格式:void rewind(FILE *stream);

    返回值:无

    参数说明:

        *stream:文件指针

     

    ftell 函数说明:

    作用:得到文件位置指针当前位置相对于文件首的偏移字节数(测定文件位置标记的当前位置)

    格式:long ftell(FILE *stream);

    返回值:成功返回当前文件位置,失败返回-1L

    参数说明:

        *stream:文件指针

    注:因为ftell返回long型,根据long型的取值范围-2^31~2^31-1(-2147483648~2147483647),故对大于2.1G的文件进行操作时出错。

     

    fseek 函数说明:

    作用:重定位流(数据流/文件)上的文件内部位置指针

    格式:int fseek(FILE *stream, long offset, int origin);

    返回值:成功返回0,失败返回非0值

    参数说明:

        *stream:文件指针

        offset:偏移量,正数表示正向偏移,负数表示负向偏移。因为是long型数据,所以应在数字后面加一个字母L

        origin:设定从文件的哪里开始偏移,可取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET,详见下表:

    名字 起始点 用数字代表
    SEEK_SET 文件开始位置 0
    SEEK_CUR 文件当前位置 1
    SEEK_END  文件末尾位置 2


    示例:

    fseek(fp,100L,0);     // 把位置指针移动到离文件开头100字节处
    fseek(fp,100L,1);     // 把位置指针移动到离文件当前位置100字节处
    fseek(fp,-100L,2);    // 把位置指针退回到离文件结尾100字节处

     

    五、文件读写的出错检测

    ferror 函数说明:

    作用:在调用各种输入输出函数(如 putc、getc、fread、fwrite等)时,如果出现错误,除了函数返回值有所反映外,还可以用ferror函数检查

    格式:int ferror(FILE *stream);

    返回值:返回0表示未出错,返回非0值表示出错

    参数说明:

        *stream:文件指针

     

    clearerr 函数说明:

    作用:使文件错误标志和文件结束标志置为0。假设在调用一个输入输出函数时出现了错误,ferror函数值为一个非零值。在调用clearerr(fp)后,ferror(fp)的值变为0。只要出现错误标志,就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数。

    格式:void clearerr(FILE *stream);

    返回值:无

    参数说明:

        *stream:文件指针

     

    六、实例:读取文件A的内容输出到屏幕上并写入到文件B中

    1、我们先在D盘下新建一个文本文档(文件名为:A.txt)文件,并在该文件里面写入任意字符,如果没有此文件会因为找不到文件而造成文件打开失败。

    2、编译源代码并运行程序,程序会将文件("A.txt")里面的字符逐个读取输出到屏幕上,并且会在D盘新建一个"B.txt"文件,其内容与"A.txt"文件相同

     

    3、若打开文件失败,则如下图所示,此时应检查文件路径是否正确(检查D盘下是否存在"D:\\A.txt"文件)

     

    C语言源代码:

    复制代码
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 int main()  
     5 { 
     6     FILE *fp1, *fp2; // 文件指针 
     7     char ch;  // 用来接收读取到的字符 
     8     char filename1[] = "D:\\A.txt"; // 文件A的路径,需要读取的文件,如果文件不存在则出错 
     9     char filename2[] = "D:\\B.txt"; // 文件B的路径,将文件A.txt读取到的数据存入当前文件 
    10     
    11     fp1=fopen(filename1, "r"); // 以只读的方式打开文件A 
    12     fp2=fopen(filename2, "w"); // 以只写的方式打开文件B 
    13     if(fp1==NULL || fp2==NULL) // 判断文件是否打开成功 
    14     {   //打开文件失败了 
    15         printf("cannot open the file!\n");  
    16         exit(1);  // 退出程序 需要头文件<stdlib.h>
    17     }
    18     
    19     //---开始--读取文件并输出到屏幕上---//
    20     ch=fgetc(fp1); // 读取第一个字符 
    21     while(ch!=EOF) // EOF即文件结束符 
    22     {
    23         putchar(ch); // 将从文件A读取到的字符输出到屏幕上 
    24         ch=fgetc(fp1);  // 读取下一个字符 
    25     }
    26     //---完成--读取文件并输出到屏幕上---//
    27     
    28     //---开始--读取文件A并输出到文件B里面---//
    29     rewind(fp1); // 将文件A的位置指针重新移到文件头
    30     ch=fgetc(fp1); // 读取第一个字符 
    31     while(ch!=EOF) // EOF即文件结束符
    32     {
    33         fputc(ch,fp2); // 将从文件A读取到的字符写入到文件B内 
    34         ch=fgetc(fp1);  // 读取下一个字符 
    35     }
    36     //---完成--读取文件A并输出到文件B里面---//
    37     
    38     fclose(fp1);  //关闭数据文件 
    39     fclose(fp2);  //关闭数据文件
    40     return 0;
    41 }

     

    转载于:https://www.cnblogs.com/Kroner/p/10803695.html

    展开全文
  • PyCharmpy文件自动添加头文件 1.PyCharm设置 打开File–&amp;gt;Settings–&amp;gt;Editot–&amp;gt;File and Code Templates选择Python Script添加如下头文件 #!/usr/bin/env python # -*- ...

    PyCharm中py文件自动添加头文件

    • 1.PyCharm设置

    打开File–>Settings–>Editot–>File and Code Templates选择Python Script添加如下头文件

    #!/usr/bin/env python
    
    # -*- coding: utf-8 -*-
    
    """
    
    @author: lynnyq
    
    @license: (C) Copyright 2018, xxx Corporation Limited.
    
    @contact: lynnyq@qq.com
    
    @software: 
    
    @file: ${NAME}.py
    
    @time: ${DATE} ${TIME}
    
    @desc:
    
    """
    
    展开全文
  • eclipse CDT C++编程 eclipse中添加头文件和库文件
                   

    转载自:

    编译添加include路径


    添加链接库






               
    展开全文
  • 我用的ubuntu,用了非标准库,已经安装之后,发现anjuta找不到头文件,应该设置什么环境变量,把头文件目录和so文件目录加入呢?
  • driver文件添加speed.c和speed.h文件 图解
  • 1、cpp文件中包含.h文件,要么你要用到这个头文件中的函数或者类,要么就是实现这个头文件;2、.h ---就是为了放一堆声明所产生的东西。 如果是定义放在.h中。 如果.h被重复包含多次,那么则会被报重定义。所以...
    现有两个文件Test.h 和Test.cpp
     #include <iostream>在Test.h中包含 和在Test.cpp中包含有什么区别?
    1、在cpp文件中包含.h文件,要么你要用到这个头文件中的函数或者类,要么就是实现这个头文件;
    2、.h ---就是为了放一堆声明所产生的东西。
    如果是定义放在.h中。     如果.h被重复包含多次,那么则会被报重定义。所以在.h 中都要---如果函数就要是inline ,如果是变量就要 selectany (windows)才不会被报错。
    3、#include尽量写到cpp文件里。两个文件在.h文件里相互include,就会产生编译错误,而两个文件在.c文件互相include,就不会有该问题,因此在.h文件include就要避免互相包含的问题,而.cpp文件就不需要考虑
    4、1)在 .h 里面 include 的好处是:
    如果很多.c,.cpp文件,都包含一批头文件,
    如果复制很容易遗漏
    如果输入,很容易出错

    如果全部在一个.h, include  那么每个.c,.cpp文件只需要一个#include 语句
    这样不仅输入量减少,
    而且代码也美观多了
    代码也主次分明了
    毕竟,.c.cpp, 里面
    要实现的函数,才是主要代码

    2)主要缺陷,
    可能会包含完全不需要的头文件,
    增加编译工作量
    5、如果你在a.h头文件中include了“stdio.h”,“iostream”,……一大堆
    那么你的a.cpp源文件只要include你的a.h,就相当于include了“stdio.h”,“iostream”,……一大堆
    但是当其他文件include你的a.h的同时也就包含了“stdio.h”,“iostream”,……一大堆

    这个要看你个人需要,如果你需要让其他文件也include一大堆,那么写在a.h中就可以,其他文件包含a.cpp简单整洁无脑
    如果只有a.cpp需要include一大堆,那么还是建议在a.cpp中include一大堆
    6、如果a.c包含了头文件a.h,a.h包含了头文件b.h,b.c也包含了b.h,那么当b.h发生改变时,a.c和b.c都会重新编译
    也就是所有包含了b.h的都会重新编译,无论是直接包含,还是间接包含
    7、2点原则:

    第一个原则:如果可以不包含头文件,那就不要包含了,这时候前置声明可以解决问题。如果使用的仅仅是一个类的指针,没有使用这个类的具体对象(非指针),也没有访问到类的具体成员,那么前置声明就可以了。因为指针这一数据类型的大小是特定的,编译器可以获知(C++编译器自上而下编译源文件的时候,对每一个数据的定义,总是需要知道定义的数据的类型的大小) 第二个原则:尽量在CPP文件中包含头文件,而非在头文件中。假设类A的一个成员是是一个指向类B的指针,在类A的头文件中使用了类 B的前置声明并编译成功,那么在A的实现中我们需要访问B的具体成员,因此需要包含头文件,那么我们应该在类A的实现部分(CPP文件)包含类B的头文件而非声明部分(H文件)

    展开全文
  • Clion如何添加头文件

    千次阅读 2021-02-24 17:46:08
    Clion如何头文件
  • Qt Creator添加头文件包含路径的方式是修改<项目名称>.pro文件在文件内部添加一行 INCLUDEPATH += ./xxx 这里“./”代表.pro文件所在目录,也可以使用绝对路径比如 INCLUDEPATH += C:/yyy/xxx 如果编译...
  • 通俗易懂的语言来解释C语言中头文件和源文件的关系
  • vscode中C语言添加头文件目录

    千次阅读 2020-06-06 22:25:56
  • 简单的说其实要理解C文件头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之...
  • VS2012中添加头文件和库文件

    千次阅读 2017-03-12 09:56:38
    A、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。 B、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件...
  • C语言如何定义,添加头文件

    万次阅读 多人点赞 2018-11-15 19:55:11
    C语言头文件的常用格式如下: #ifndef LABLE #define LABLE //代码部分 #endif 其中,LABLE为一个唯一的标号,命名规则跟变量的命名规则一样。 常根据它所在的头文件来命名 举列如下: // 头文件hardware.h...
  • 在c_cpp_properties.json的"includePath": 中添加了自己编写的头文件的相对路径,然而显示报错: ![图片说明](https://img-ask.csdn.net/upload/202002/16/1581865472_97016.png) 头文件路径: ![图片说明]...
  • VS工程添加c/c++工程外部头文件及库的基本步骤:  1、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。  2、添加文件引用的lib静态库路径:工程...
  • Keil添加文件头文件

    千次阅读 多人点赞 2020-08-01 22:18:37
    工程文件夹下面新建一个.c和一个.h文件,.c文件就是要添加文件,.h文件就是要添加头文件 ①右键点击Project下面的第一个文件夹 ②点击Manage Project Items ①是新建文件夹 ②是删除文件夹 ③是添加文件 ...
  • 函数定义从头文件自动移动到cpp文件中 先要头文件有一个定义好的函数,然后要移动的函数那一行右键后按下图操作 ...自定cpp中添加定义,先要在头文件中有个声明好的函数,右键按下图操作 ...
  • vscode中添加头文件路径

    千次阅读 2020-08-16 17:27:32
    vscode按Ctrl+Shift+P 输入configuration ,编辑c_cpp_properties.json,其includePath字段中添加添加的SDK或者库的头文件路径 { "configurations": [ { "browse": { "databaseFilename": "", ...
  • 2)如果找到,则会找文件中第一个目标文件(target)。 3)如果 main 命令的执行,依赖后面命令执行所产生的文件,则先执行后面命令 4)当main 命令需要的文件生成完毕,则执行main 命令 makefile: #开头的都是...
  • C语言中的string头文件解析

    万次阅读 多人点赞 2017-12-29 00:12:20
    标准库提供了一些函数用于处理字符串,它们的原型位于头文件string.h中。 •string.h头文件定义了一个变量...string.h头文件中定义了22个库函数。 其中常用的有: •memcpy函数 函数原型: void *memcpy(vo...
  • 附加头文件包含VC6.0:VC6.0默认include包含路径:Tools>Options>Directories>Include files。对于特定项目的头文件包含,“Project Setting>C/C++ (Category:Preprocessor)>Additional include...
  • C语言中头文件和源文件的注意...因为C语言编程或者C++语言编程,经常要添加头文件,不像Python直接引入第三库就可以(import),但是嵌入式编程中C还是主流,Python目前这方面的应用还是比较少的,故如果完成一个大...
  • 使用QtCreator开发图像处理程序的时候想加入Opencv库来处理图形,添加头文件,需要编辑工程文件夹下的.pro文件在文件中添加以下内容,即可包含头文件的文件夹: INCLUDEPATH +=D:\OpenCV2.0\vc2008\include\...
  • 多个头文件需要多个.c文件中包含时,我们为了避免麻烦,会单独写一个.h文件用来存放.h文件, 此时只需要不同的.c文件中包含该头文件即可。 #ifndef CONSTANT_H_ #define CONSTANT_H_ #include "header.h" ...
  • C语言 makefile文件头文件的写法。

    千次阅读 2015-12-13 13:39:55
     2)如果找到,则会找文件中第一个目标文件(target)。  3)如果 main 命令的执行,依赖后面命令执行所产生的文件,则先执行后面命令   4)当main 命令需要的文件生成完毕,则执行main 命令
  • C语言中的stdio头文件解析

    千次阅读 2018-02-02 22:01:23
    stdio .h 头文件定义了三...3:fpos_t :这是一个适合存储文件中任何位置的对象类型。 定义的几个宏: 1:NULL 2:_IOFBF、_IOLBF、_IONBF:这些宏为带有特定值的整型常量表达式,并适用于 setvbuf 函数的第三...
  • vscode配置或添加头文件路径

    万次阅读 2020-04-06 15:58:49
    vscode配置或添加头文件路径 vscode按Ctrl+Shift+P 输入configuration 在c_cpp_properties.jsonincludePath字段添加待添加的SDK或者库的头文件路径 例:"/usr/local/xxx/include/" { "configurations": ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 181,630
精华内容 72,652
关键字:

如何在c文件中添加头文件