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 即刷新数据流. 所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...
 
随机推荐
- BFS DFS模板
			
转载于https://blog.csdn.net/alalalalalqp/article/details/9155419 BFS模板: #include<cstdio> #include ...
 - Spark 系列(四)—— RDD常用算子详解
			
一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ...
 - linux下实现并发逻辑
			
################shell 模拟实现并发跑数#################有时候我们知道一些程序是可以同时跑的,互不影响,为了提高效率不得不使用并发跑脚本 #1.思路一我们都知道在 ...
 - #348 大陆争霸(DIjkstra)
			
在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯普林·布拉 ...
 - Java 调用http接口(基于OkHttp的Http工具类方法示例)
			
目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...
 - (四十一)c#Winform自定义控件-进度条
			
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
 - DRF (Django REST framework) 中的视图扩展类
			
2. 五个扩展类 1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法 ...
 - Springboot源码分析之jar探秘
			
摘要: 利用IDEA等工具打包会出现springboot-0.0.1-SNAPSHOT.jar,springboot-0.0.1-SNAPSHOT.jar.original,前面说过它们之间的关系了, ...
 - hbase集群region数量和大小的影响
			
1.Region数量的影响 通常较少的region数量可使群集运行的更加平稳,官方指出每个RegionServer大约100个regions的时候效果最好,理由如下: 1)Hbase的一个特性MSLA ...
 - Selenium+java - 手把手一起搭建一个最简单自动化测试框架
			
写在前面 我们刚开始做自动化测试,可能写的代码都是基于原生写的代码,看起来特别不美观,而且感觉特别生硬. 来看下面一段代码,如下图所示: 从上面图片代码来看,具体特征如下: driver对象在测试类中 ...