文件的打开与关闭

首先要定义一个文件指针类型,格式为 FILE *文件指针名; ;

FILE *fp;  //fp就是定义的文件指针

●打开文件fopen()函数,格式: fp = fopen("文件名", "打开方式");

fp = fopen("c:\\myfile", "r");  //打开方式下文会讲到

文件名中不允许直接使用路径描述符 "\",必须用转义字符的形式 "\\"。"\\" 中第一个 "\" 是转义字符,第二个表示路径描述符。

●关闭文件fcolse()函数,格式: fclose(文件指针);

fclose(fp);

功能:正常完成关闭文件操作时fclose返回0,否则返回EOF(值为-1),表示有错误发生。

●打开文件的方式:

共有12种,由r(read), w(write), a(append), b(binary), +(read/write)五个字符组合而成。

"r", "w", "a", "r+", "w+", "a+"  :这六种打开文本文件

"rb", "wb", "ab", "rb+", "wb+", "ab+"  :这六种打开二进制文件

"r" 打开一个文本文件,可以读取文件
"w" 打开一个文本文件,可以写入文件,先将文件的长度截为0。如果该文件不存在则先创建
 "a" 打开一个文本文件,可以写入文件,向已有文件的尾部追加内容,如果该文件不存在则先创建
"r+" 打开一个文本文件,可以进行更新(读取和写入),也即可以读取和写入文件
"w+" 打开一个文本文件,可以进行更新(读取和写入),如果该文件存在则首先将其长度截为0,如果该文件不存在则先创建
"a+" 打开一个文本文件,可以进行更新(读取和写入),向已有文件的尾部追加内容,如果该文件不存在则先创建;可以读取整个文件,但写入时只能追加内容。
"rb", "wb", "ab", "rb+", "wb+", "ab+", "r+b", "w+b", "a+b" 与前面的模式相似,只是使用二进制而非文本模式打开文件

注意:如果用"w"模式打开任意一个文件,文件内容将删除,以便程序以一个空文件开始操作。

●文件结束的判定feof()函数,格式: feof(文件指针)

这里举一个例子帮助理解:

while(!feof(fp))   //我们已在文件的末尾加上结束标志-1
{ c = fgetc(fp);
print("当到文件尾时,此段文字不显示");
}
//此段程序的含义是:当为!feof(fp)为1,从当前位置读入一个字节的数据赋给字符型变量c,指当遇到文件结束标志时,feof(fp)的值为1,feof(fp)为0,循环结束

feof()函数功能:测试文件指针所指向的文锦啊内部读写位置指针是否到达文件尾。当文件结束时返回1,否则返回0。

文件的读写

1.字符,字符串的读写

写字符函数fputc,功能:把一个字符写入此盘文件中,若输出成功,则返回输出的字符,否则返回EOF。格式:

fputc(ch, fp);   //将字符ch的值输出到fp所指向的文件中

ch:要输出的字符,可以是字符常量,也可以是字符变量。

读字符函数fgetc,功能:从指定文件读入一个字符,该文件必须是以读或读写方式打开的,若读取成功返回读取的字符,否则返回EOF。格式:

ch = fgetc(fp);  //读取成功返回字符赋值给ch

写字符串函数fputs,格式: fputs("字符串", 文件指针);     功能:向指定的文件写入一串字符,写入成功返回0,否则返回非0值。

fputs("Welcome to my blog", fp);

注意:fputs函数将写入文件的字符串中的空字符去掉,ptus函数将空字符换成换行字符输出。

读字符串函数,格式: fgets(字符串, n, fp);      功能:从fp指向的文件读入n-1个字符存放第一个参数中,如果遇到换行符或EOF,则结束。

fgets(str, n, fp); //str 为字符数组。从fp指向的文件读入n-1个字符存放到str数组中

注意:读入字符串后在最后加一个 '\0' 字符,fgets函数返回的返回值为字符串的首地址。

2.数据块的读写

数据块写文件函数fwrite(),格式:

fwrite(buffer, size, count, fp);

buffer:是一个指针,用来指出带输出数据的地址。

size:每次要写的字节数

count:写入多少个size大小的数据项

注意:完成写操作(fwrite())后必须关闭文件(fclose())

数据块的读文件函数fread(),格式:

fread(buffer, size, count, fp);

count:读入多少个size大小的数据项

3.格式化读/写文件函数

读文件fprintf(),格式: fprintf(文件指针,"格式控制",输出列表);

fprintf(fp,"%d, %d",a, b);  //将a,b写入fp指向的文件中

注意:fprintf()函数总是将输出项在内存中的表示形式按指定的格式转换成字符串形式,再写入到指定的文件中。

写文件fscanf(),格式: fscanf(文件指针,"格式控制",地址列表);

fprintf(fp,"%d, %d",&a, &b);  //将fp指向的文件中的数据读出并存放于a,b

注意:fscanf()函数从文件中读出的数据一定是按字符串形式(文本形式)存在的。

文件定位

●rewind()函数,格式: rewind(文件指针);     功能:使文件指针的读写位置重新返回到文件的开头。
rewind(fp);
 

●fseek()函数,格式: fseek(文件指针, 位移量w, 起始点s);     功能:使文件指针移到距起始点偏移w个字节处。

fseek(fp, , );  //使文件指针移到距起始点0偏移2个字节数

w:当w为正数时表示向文件尾方向移动,为负数时表示向文件头移动,为0表示不移动。

s:可以为0,1,2;s=0表示文件头,s=0表示当前位置,s=0表示文件末尾。
 
●ftell()函数,格式: ftell(文件指针);     功能:得到流式文件中的当前位置,用相对与文件开头的位移量来表示。若ftell()函数返回-1L表示出错。 
i = ftell(fp); //存放当前位置给变量i
if(i == -1L)
printf("error\n"); //若调用的函数出错(如不存在此文件),则输出ERROR
 

文件的检测

常用的文件检测函数有两个 ferror()和clearerr()
ferror()函数,功能:若ferror()函数的返回值为0,则表示未出错,非0表示出错。格式:
ferror(fp)

clearerr()函数,功能:使文件错误标志和文件结束标志置为0。格式:

clearerr(fp)

20170104完

 

【c基础】之 文件及其操作的更多相关文章

  1. delphi 基础之三 文件流操作

    文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...

  2. python 基础之文件读操作

    创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...

  3. Python基础灬文件常用操作

    文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...

  4. C语言基础 (12) 文件的操作 FILE

    课程回顾 结构体基本操作: 结构体类型的定义 // struct为关键字 Stu为自定义标识符 // struct Stu才是结构体类型 // 结构体成员不能在定义类型时赋值 struct Stu { ...

  5. node基础-文件系统-文件写操作

    文件操作频率最高的就是读跟写.nodejs的文件的读取API在<node基础-文件系统-读取文件>里已经简单介绍过,本文就简单介绍下nodejs的文件写API. nodejs的文件操作均提 ...

  6. python3基础之文件对象操作

    1.向文本文件中写入内容 s = 'Hello world\n文本文件的读取方法\n文本文件的写入方法\n' # 需要写入文件的字符串 print('显示需要写入的内容:\n{0:s}'.format ...

  7. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作

    复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...

  8. python基础(5)-文件操作

    文件(file)操作 创建文件 verse.txt: 床前明月光 疑是地上霜 open(path(文件路径),mode(模式:r/r+[读],w/w+[写],a/a+[追加])):返回文件句柄(对象) ...

  9. Go语言基础之文件操作

    本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个 ...

  10. ndk学习之c++语言基础复习----C++容器、类型转换、异常与文件流操作

    继续来复习C++,比较枯燥,但是这是扎实掌握NDK开发的必经之路,不容小觑. 容器: 容器,就是用来存放东西的盒子. 常用的数据结构包括:数组array, 链表list, 树tree, 栈stack, ...

随机推荐

  1. PAT (Advanced Level) 1079. Total Sales of Supply Chain (25)

    树的遍历. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...

  2. Unity3d之shaderLab内置变量

    float4 _WorldSpaceCameraPos camera在世界坐标系中的位置float4 _WorldSpaceLightPos0 灯光在世界坐标系中的位置 转载请注明出处: http:/ ...

  3. (中等) POJ 2482 Stars in Your Window,静态二叉树。

    Description Here comes the problem: Assume the sky is a flat plane. All the stars lie on it with a l ...

  4. python模块--ip地址转换为整数

    python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import ...

  5. vim中c/c++源码跳转

    在使用vim阅读c/c++代码的时候,代码跳转很重要, 在学习redis代码的时候遇到这个问题. 网上查找之后通过实践发现cscope比较好用,可以很方便的实现跳转 1. 安装cscope sudo ...

  6. 扩展对EasyUI的校验规则

    var myReg = RegExp(/[(\*)(\|)(\\)(\:)(\")(\/)(\<)(\>)(\?)]+/); $.extend($.fn.validatebox. ...

  7. Delphi 内存分配 StrAlloc New(转)

    源:Delphi 内存分配 StrAlloc New 引自:http://anony3721.blog.163.com/blog/static/5119742010824934164/   给字符指针 ...

  8. Mysql的收获

    今天公司的业务需求中,遇到一个很郁闷的情况. 有一个申请记录,缺少申请原因的字段. 我以为很简单,采用left jion 很容易获取到申请原因. SELECT a.*,b.RealName,c.Dep ...

  9. onethink部署时后台登陆的问题

    情况:本地开发后,上传到服务器时,无法登陆后台. 原因:用户的读取数据库的配置与应用的配置 分别在2个地方.而一般我们只记得修改一处配置. 解决:找到application/user/conf/con ...

  10. JS 中 Class - 类创建

    Class - 类创建 Class类实现了在JavaScript中声明一个新的类, 并通过构造函数实例化这个类的机制.通过使用Class.create()方法, 你实际上声明了一个新的类, 并定义了一 ...