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语言文件的基本操作的更多相关文章

  1. C语言对文件的基本操作

    在C语言中,对于文件的操作是利用FILE结构体进行的. 几个常用的操作文件函数简介 1:打开文件 FILE *fopen( const char *filename, const char *mode ...

  2. C语言文件操作

    C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作. 操作文件,我们得需要知道什么?当然是路径和文件名. 首先我需要知道我操作的文件在哪里,叫什么名字.在C语言中还存在一个打开方 ...

  3. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  4. go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

    go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

  5. android多国语言文件夹文件汇总

    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-e ...

  6. 不可或缺 Windows Native (10) - C 语言: 文件

    [源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...

  7. C语言---文件

    1. 需要了解的概念 包括:数据流.缓冲区.文件类型.文件存取方式 1.1 数据流: 指程序与数据的交互是以流的形式进行的.进行C语言文件的存取时,都会先进行“打开文件”操作,这个操作就是在打开数据流 ...

  8. CUBRID学习笔记 29 web管理中文语言文件 CUBRID教程

    网站的中文语言文件部分 http://files.cnblogs.com/files/wang2650/Messages.7z

  9. C 语言文件操作

    C 语言文件操作 1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...

随机推荐

  1. React 如何搭建脚手架

    React 如何搭建脚手架   npm install -g create-react-app    //安装 create-react-app react-demo    // react-demo ...

  2. SpringBoot 集成Jedis操作set

    题外话: Redis是个有趣的东西,相信搞java的或多或少都会用到,面试时也总离不开问Redis,之前觉得redis只是用做缓存,飞快!也因为最初在封装底层的时候,使用Redisson,所以大部分都 ...

  3. 利用反射,更改string对象的value数组以达到改变string值。

    package test; import java.lang.reflect.Field; import lombok.Value; public class Test1{ public static ...

  4. RE最全面的正则表达式----数字篇

    一.校验数字的表达式 数字:^[0-9]*$n位的数字:^d{n}$至少n位的数字:^d{n,}$m-n位的数字:^d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带 ...

  5. eclipse插件——maven

    项目开发中遇到的问题 都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? 为什么在我的机器上可以正常打包,而配置管理员却打不出来? 项目组加入了新的人员,我要给他说明编译环境如何设 ...

  6. 在Linux和Windows系统中输出目录结构

    前言 一直以来就想在写文章时,能以文本形式(而不是截图)附上项目的目录结构,今天终于知道怎么操作了,在这分享一下. Linux 首先说下Linux上输出目录结构的方法. yum安装tree 需要支持t ...

  7. JVM类生命周期概述:加载时机与加载过程

    一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用.事实上,虚拟机把描述类的数据从Class文件 ...

  8. 洛谷 P3648 [APIO2014]序列分割

    题意简述 有一个长度为n的序列,分成k + 1非空的块, 选择两个相邻元素把这个块从中间分开,得到两个非空的块. 每次操作后你将获得那两个新产生的块的元素和的乘积的分数.求总得分最大值. 题解思路 f ...

  9. Cause: java.lang.NumberFormatException: For input string: "D"

    异常:Cause: java.lang.NumberFormatException: For input string: "D" 问题回显: 原因分析:'D'只有1位,被认为是ch ...

  10. Powered by .NET Core 进展0819:高速开车车况汇报

    继续以流水账的方式向大家汇报,自从上周六上午将 .net core 版博客站点从 windows 部署切换到 linux 上的 docker-compose 部署后,到目前一直在线. Linux 上没 ...