【c基础】之 文件及其操作
文件的打开与关闭
首先要定义一个文件指针类型,格式为 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(fp);
●fseek()函数,格式: fseek(文件指针, 位移量w, 起始点s); 功能:使文件指针移到距起始点偏移w个字节处。
fseek(fp, , ); //使文件指针移到距起始点0偏移2个字节数
w:当w为正数时表示向文件尾方向移动,为负数时表示向文件头移动,为0表示不移动。
i = ftell(fp); //存放当前位置给变量i
if(i == -1L)
printf("error\n"); //若调用的函数出错(如不存在此文件),则输出ERROR
文件的检测
ferror(fp)
clearerr()函数,功能:使文件错误标志和文件结束标志置为0。格式:
clearerr(fp)
20170104完
【c基础】之 文件及其操作的更多相关文章
- delphi 基础之三 文件流操作
文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...
- python 基础之文件读操作
创建一个名为‘尘曦’的文件内容如下 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. ...
- Python基础灬文件常用操作
文件常用操作 文件内建函数和方法 open() :打开文件 read():输入 readline():输入一行 seek():文件内移动 write():输出 close():关闭文件 写文件writ ...
- C语言基础 (12) 文件的操作 FILE
课程回顾 结构体基本操作: 结构体类型的定义 // struct为关键字 Stu为自定义标识符 // struct Stu才是结构体类型 // 结构体成员不能在定义类型时赋值 struct Stu { ...
- node基础-文件系统-文件写操作
文件操作频率最高的就是读跟写.nodejs的文件的读取API在<node基础-文件系统-读取文件>里已经简单介绍过,本文就简单介绍下nodejs的文件写API. nodejs的文件操作均提 ...
- python3基础之文件对象操作
1.向文本文件中写入内容 s = 'Hello world\n文本文件的读取方法\n文本文件的写入方法\n' # 需要写入文件的字符串 print('显示需要写入的内容:\n{0:s}'.format ...
- day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作
复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...
- python基础(5)-文件操作
文件(file)操作 创建文件 verse.txt: 床前明月光 疑是地上霜 open(path(文件路径),mode(模式:r/r+[读],w/w+[写],a/a+[追加])):返回文件句柄(对象) ...
- Go语言基础之文件操作
本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个 ...
- ndk学习之c++语言基础复习----C++容器、类型转换、异常与文件流操作
继续来复习C++,比较枯燥,但是这是扎实掌握NDK开发的必经之路,不容小觑. 容器: 容器,就是用来存放东西的盒子. 常用的数据结构包括:数组array, 链表list, 树tree, 栈stack, ...
随机推荐
- Windows上mxnet实战深度学习:Neural Net
前提: 假设已经在Windows上安装配置好mxnet和python语言包. 假设mxnet安装目录为D:\mxnet 假设已安装好wget 可以参考 这篇文章 打开Windows的命令提示符: 执行 ...
- Myeclipse创建新项目
1. 打开myeclipse, 配置mysql server preference里找到 show view-- DB Browser, 新建数据库驱动. 1. URL填写: jdbc:mysql:/ ...
- svn switch 的用法
switch用于在同一个版本库内不同分支之间的切换relocate用于版本库访问地址变更时,重新定位版本库 比如,由于SVN服务器更换到另一台主机上,这是SVN服务器的地址改变了,那么各客户端就无法连 ...
- 关于OC和Swift使用GIT创建项目
1.先进入码云,点击自己的头像 -> ,2.里面有一个SSH公钥,点击 ,3.之后在终端输入 ssh-keygen -t rsa -C “xxxxx@xxx.com”,注意:”” 要用英 ...
- tp框架实现文件上传
public function shangchuan() { $this->display(); } public function upload() { $uplode= new \Think ...
- Servlet中的过滤器Filter用法
1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...
- RFID射频卡超市购物结算系统
RFID射频卡超市购物结算系统 这段时间在做RFID射频卡超市购物结算系统,这个系统的设想来自于大学研究课题,但是我们在淘宝网上购买设备的时候淘宝店主都认为RF射频技术不好应用在超市购物结算系统,原因 ...
- Treap初步
模板题 bzoj3224: Tyvj 1728 普通平衡树 #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i ...
- docker网络访问(三)
docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPor ...
- IM 融云 之 初始化及登录
融云是没有用户体系的,用户登录需要获取token,测试时可以使用网站提供的接口,但是正式是要通过服务器调用专门的接口从融云获取的.并且我没看到融云的重连机制,不知道是否已在SDK内部实现. 现在看来, ...