C语言文件的基本操作包括,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#include#include

函数原型:

voidwriteFile(char*fileRealName,char*writeStr); //将一个字符串写入某个文件中

voidreadFile(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);

}

测试写入文件:

intmain(){

writeFile("c:/1.txt", "fdweqfefwef");

system("pause");

return0;

}

运行结果:

1010

测试读取文件:

intmain(){

readFile("c:/1.txt");

system("pause");

return0;

}

运行结果:

1010

二、按行操作:

头文件跟上面一样

函数原型:

voidreadLine(constchar*fileRealName);// 读取一行

voidwriteLine(constchar*fileRealName,constchar*writeLine);写入一行

实现方法:

voidreadLine(constchar*fileRealName){

FILE *pf = NULL;

charrl[1024];

char*p = NULL;

pf = fopen(fileRealName, "r+");

if(pf == NULL){

printf("文件不存在");

return;

}

while(!feof(pf)){

p = fgets(rl, 1024, pf);

if(p == NULL)

gotoend;

printf("%s", rl);

}

end :

fclose(pf);

}

voidwriteLine(constchar*fileRealName,constchar*writeLine){

FILE *pf = NULL;

pf = fopen(fileRealName, "r+");

if(pf == NULL){

printf("文件不存在");

return;

}

fputs(writeLine, pf);

fclose(pf);

}

写入测试就不做了,跟字符操作一样

读取测试:

文本文档为:

ggg

3456

zhang

张三

李四

intmain(){

readLine("c:/1.txt");

system("pause");

return0;

}

运行结果:

1010

三、按照内存块操作:

头文件一样,全局变量:

typedef struct Teacher{

int id;

char name[64];

}Teacher;

函数原型:

void writeTeachers(const Teacher *ts, int len, char *fileRealName);//将数组写入二进制文件中

int readTeachers(Teacher **ts, char *fileRealName);//从二进制文件中读取数据并且创建一个数组来存储,返回值为数组的长度

void printTeacher(Teacher *ts, int len); //遍历数组

实现方法:

1 void writeTeachers(const Teacher *ts, int len, char *fileRealName){

2

3     FILE *pf;

4     int count, i;

5

6     pf = fopen(fileRealName, "wb"); //创建一个二进制文件

7

8     if(pf == NULL)

9         printf("open error!\\n");

10

11     for (i = 0; i < len; i++){

12         count = fwrite(&(ts[i]), sizeof(Teacher), 1, pf); // fwrite()函数人参数分别是写入变量的地址,写入变量的大小,复制多少次(大于一次会顺序存储到该地址后面),文件句柄;返回值是复制成功的次数,如果成功则返回第三个参数的值,反之返回0

13         printf("%d\\n", count);

14     }

15

16     fclose(pf);

17 }

18 /*

19 返回值是读取教师数组的元素个数,教师数组由函数分配内存

20 */

21 int readTeachers(Teacher **ts, char *fileRealName){

22

23     FILE *pf;

24     int count = 0 ,len = 0;

25     Teacher *temp = NULL;

26     Teacher *pt = NULL;

27

28     pf = fopen(fileRealName, "rb+");//打开一个二进制文件

29

30     if(pf == NULL)

31         printf("open error!\\n");

32

33     temp = (Teacher*)malloc(sizeof(Teacher));

34

35     do{

36         count = fread(temp, sizeof(Teacher), 1, pf);

37         len++;

38     }while(count != 0);

39

40     len--; //获得该文件存储的数组的长度

41

42     if(temp != NULL){

43         free(temp);

44         temp = NULL;

45     }

46

47     rewind(pf);//将文件指针重新指向文件开头

48     pt = (Teacher *)malloc(sizeof(Teacher) * len);

49

50     for(count = 0; count < len; ++count){

51         fread(&(pt[count]), sizeof(Teacher), 1, pf);//fread()函数跟fwrite函数极为类似,参照上面的注释

52         printf("第%d位教师 编号 %d姓名 %s\\n", count + 1, pt[count].id, pt[count].name);

53     }

54

55     fclose(pf);

56     *ts = pt;

57     return len;

58 }

59

60 void printTeacher(Teacher *ts, int len){

61

62     int i;

63

64     for(i = 0; i < len; ++i){

65         printf("第%d位教师 编号 %d姓名 %s\\n", i + 1, ts[i].id, ts[i].name);

66     }

67 }

测试写:

intmain(){

Teacher ts[3];

inti;

for(i = 0; i < 3; i++){

ts[i].id = 1000 + i;

sprintf(ts[i].name, "zhangsan%d", i + 1);

}

writeTeachers(ts, 3, "c:/2.data");

system("pause");

return0;

}

最终生成一个二进制文件

测试读:

int main(){

Teacher *ts = NULL;

int len = 0;

len = readTeachers(&ts, "c:/2.data");

printTeacher(ts, len);

if(ts != NULL){

free(ts);

ts = NULL;

}

system("pause");

return 0;

}

运行结果:

1010

来源:博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值