c语言文件的基本操作
c语言对文件的操作主要分为:按字符操作,按行操作,按内存块操作
主要的函数:
fopen():
FILE * fopen(_In_z_ const char * _Filename, _In_z_ const char * _Mode);
第一个参数是文件的绝对路径名(包含文件),第二个是文件的打开方式,Mode(方式)意义如下:
"r" 打开一个用于读取的文本文件
"w" 创建一个用于写入的文本文件
"a" 附加到一个文本文件
"rb" 打开一个用于读取的二进制文件
"wb" 创建一个用于写入的二进制文件
"ab" 附加到一个二进制文件
"r+" 打开一个用于读/写的文本文件
"w+" 创建一个用于读/写的文本文件
"a+" 打开一个用于读/写的文本文件
"rb+" 打开一个用于读/写的二进制文件
"wb+" 创建一个用于读/写的二进制文件
"ab+" 打开一个用于读/写的二进制文件
fclose():关闭文件资源
一、按字符:其实就是从文件中一个个读出字符出来
头文件:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
函数原型:
void writeFile(char *fileRealName, char *writeStr); //将一个字符串写入某个文件中 void readFile(char *fileRealName); //读取文件
实现方法:
void readFile(char *fileRealName){
FILE *pf = NULL;
pf = fopen(fileRealName, "r+");
if(pf == NULL){
printf("文件不存在");
return;
}
while (!feof(pf)){
printf("%c", fgetc(pf));
}
fclose(pf);
}
测试写入文件:
int main(){
writeFile("c:/1.txt", "fdweqfefwef");
system("pause");
return ;
}
运行结果:

测试读取文件:
int main(){
readFile("c:/1.txt");
system("pause");
return ;
}
运行结果:

二、按行操作:
头文件跟上面一样
函数原型:
void readLine(const char *fileRealName);// 读取一行 void writeLine(const char *fileRealName, const char *writeLine);写入一行
实现方法:
void readLine(const char *fileRealName){
FILE *pf = NULL;
char rl[];
char *p = NULL;
pf = fopen(fileRealName, "r+");
if(pf == NULL){
printf("文件不存在");
return;
}
while(!feof(pf)){
p = fgets(rl, , pf);
if(p == NULL)
goto end;
printf("%s", rl);
}
end :
fclose(pf);
}
void writeLine(const char *fileRealName, const char *writeLine){
FILE *pf = NULL;
pf = fopen(fileRealName, "r+");
if(pf == NULL){
printf("文件不存在");
return;
}
fputs(writeLine, pf);
fclose(pf);
}
写入测试就不做了,跟字符操作一样
读取测试:
文本文档为:
ggg
3456
zhang
张三
李四
int main(){
readLine("c:/1.txt");
system("pause");
return ;
}
运行结果:

三、按照内存块操作:
头文件一样,全局变量:
typedef struct Teacher{
int id;
char name[];
}Teacher;
函数原型:
void writeTeachers(const Teacher *ts, int len, char *fileRealName);//将数组写入二进制文件中 int readTeachers(Teacher **ts, char *fileRealName);//从二进制文件中读取数据并且创建一个数组来存储,返回值为数组的长度 void printTeacher(Teacher *ts, int len); //遍历数组
实现方法:
void writeTeachers(const Teacher *ts, int len, char *fileRealName){
FILE *pf;
int count, i;
pf = fopen(fileRealName, "wb"); //创建一个二进制文件
if(pf == NULL)
printf("open error!\n");
for (i = ; i < len; i++){
count = fwrite(&(ts[i]), sizeof(Teacher), , pf); // fwrite()函数人参数分别是写入变量的地址,写入变量的大小,复制多少次(大于一次会顺序存储到该地址后面),文件句柄;返回值是复制成功的次数,如果成功则返回第三个参数的值,反之返回0
printf("%d\n", count);
}
fclose(pf);
}
/*
返回值是读取教师数组的元素个数,教师数组由函数分配内存
*/
int readTeachers(Teacher **ts, char *fileRealName){
FILE *pf;
int count = ,len = ;
Teacher *temp = NULL;
Teacher *pt = NULL;
pf = fopen(fileRealName, "rb+");//打开一个二进制文件
if(pf == NULL)
printf("open error!\n");
temp = (Teacher*)malloc(sizeof(Teacher));
do{
count = fread(temp, sizeof(Teacher), , pf);
len++;
}while(count != );
len--; //获得该文件存储的数组的长度
if(temp != NULL){
free(temp);
temp = NULL;
}
rewind(pf);//将文件指针重新指向文件开头
pt = (Teacher *)malloc(sizeof(Teacher) * len);
for(count = ; count < len; ++count){
fread(&(pt[count]), sizeof(Teacher), , pf);//fread()函数跟fwrite函数极为类似,参照上面的注释
printf("第%d位教师 编号 %d 姓名 %s\n", count + , pt[count].id, pt[count].name);
}
fclose(pf);
*ts = pt;
return len;
}
void printTeacher(Teacher *ts, int len){
int i;
for(i = ; i < len; ++i){
printf("第%d位教师 编号 %d 姓名 %s\n", i + , ts[i].id, ts[i].name);
}
}
测试写:
int main(){
Teacher ts[];
int i;
for (i = ; i < ; i++){
ts[i].id = + i;
sprintf(ts[i].name, "zhangsan%d", i + );
}
writeTeachers(ts, , "c:/2.data");
system("pause");
return ;
}
最终生成一个二进制文件
测试读:
int main(){
Teacher *ts = NULL;
int len = ;
len = readTeachers(&ts, "c:/2.data");
printTeacher(ts, len);
if(ts != NULL){
free(ts);
ts = NULL;
}
system("pause");
return ;
}
运行结果:

c语言文件的基本操作的更多相关文章
- C语言对文件的基本操作
在C语言中,对于文件的操作是利用FILE结构体进行的. 几个常用的操作文件函数简介 1:打开文件 FILE *fopen( const char *filename, const char *mode ...
- C语言文件操作
C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作. 操作文件,我们得需要知道什么?当然是路径和文件名. 首先我需要知道我操作的文件在哪里,叫什么名字.在C语言中还存在一个打开方 ...
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )
go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...
- android多国语言文件夹文件汇总
android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...
- 不可或缺 Windows Native (10) - C 语言: 文件
[源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...
- C语言---文件
1. 需要了解的概念 包括:数据流.缓冲区.文件类型.文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的.进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流 ...
- CUBRID学习笔记 29 web管理中文语言文件 CUBRID教程
网站的中文语言文件部分 http://files.cnblogs.com/files/wang2650/Messages.7z
- C 语言文件操作
C 语言文件操作 1. 数据流: 程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流. 所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...
随机推荐
- Opengl_入门学习分享和记录_03_渲染管线(二)再谈顶点着色器以及顶点属性以及属性链接
---恢复内容开始--- 写在前面的废话:岂可修!感觉最近好忙啊,本来今天还有同学约我出去玩的.(小声bb) 正文开始:之前已经编译好的着色器中还有一些问题,比如 layout(location=0) ...
- 正则表达式之Matcher类中group方法
前言 同事把一个excel表给我,里面的数据大概有几千的样子吧.自己需要把里面的数据一个一个拿出来做一个http请求,对得到的结果进行过滤,然后再写到上面去.这是就涉及到用脚本来进行操作了,于是自己搞 ...
- 在Linux和Windows系统中输出目录结构
前言 一直以来就想在写文章时,能以文本形式(而不是截图)附上项目的目录结构,今天终于知道怎么操作了,在这分享一下. Linux 首先说下Linux上输出目录结构的方法. yum安装tree 需要支持t ...
- 【干货】基于镜像部署的Gitlab-CI/CD实践和坑位指南
引言 看过前文的博友可能注意到我是把 部署dll文件拷贝到生产机器,之后在生产机器上使用docker-compose即时创建镜像, 并没有完成CI/CD, 只是在原来传统部署方式下 将部署文件容器化. ...
- PyQt编写Python GUI程序,简易示例
https://blog.csdn.net/qq_41841569/article/details/81014207
- elk安装与搭建
Elasticsearch安装配置 ·下载elasticsearch.tar.gz包,解压压缩包.(此处为单机版es,集群请参考 https://www.cnblogs.com/lazycxy/p/9 ...
- 使用 Docker Compose 快速构建 TiDB 集群
本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...
- Dig命令使用大全(转自别人翻译),稍加整理
Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具.由于一直缺失Dig man page文档,本文就权当一个dig使用向导吧. Dig的 ...
- 使用wait/notify/notifyAll实现线程间通信的几点重要说明
在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信.在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调 ...
- 玩转 SpringBoot 2 快速整合 | 丝袜哥(Swagger)
概述 首先让我引用 Swagger 官方的介绍: Design is the foundation of your API development. Swagger makes API design ...