C经典 文件的操作
2016-05-09 20:53
260 查看
一、常用函数
二、文件指针,指向文件的指针
FILE *fp;
三、文件的打开与关闭
FILE *fp = fopen(文件名,使用文件方式)
如:FILE *fp = NULL;
fp = fopen(” file.txt”,”r”);//r 表示读文件
int result = fclose(fp) ;// =0,如果不等于0,表示发生错误
四、读写方式
五、补充:
\0 :表示字符串结束
\n :表示回车换行
EOF :表示文件的末尾
六、关于中文读取
因为一个汉字占三个字节,一个字节等于8位
在C语言里每个字符串结束时都以\0
所以在读取的时候不能只读三个,会乱码
FILE *fp = fopen(“a.txt”,”r”);
//a.txt里存放的是中文
错误代码如:
正确代码如:
七、示例代码1
七、示例代码2
八、fread与fwrite函数
1)fread(buffer,size,count,fp);
2)fwrite(buffer,size,count,fp):
示例代码:
fwrite写入数据
fread读取数据
九、结构体的读写
十、fscanf和fprintf的用法
示例1
示例2
十一、文件随机读取,定位fseek
fseek(fp,curPosition,headPosition);
如:fseek(fp,100L,0);
文件首:SEEK_SET 0
当前位置:SEEK_CUR 1
文件尾部:SEEK_END 2
示例:读取第二个学生的成绩
二、文件指针,指向文件的指针
FILE *fp;
三、文件的打开与关闭
FILE *fp = fopen(文件名,使用文件方式)
如:FILE *fp = NULL;
fp = fopen(” file.txt”,”r”);//r 表示读文件
int result = fclose(fp) ;// =0,如果不等于0,表示发生错误
四、读写方式
五、补充:
\0 :表示字符串结束
\n :表示回车换行
EOF :表示文件的末尾
六、关于中文读取
因为一个汉字占三个字节,一个字节等于8位
在C语言里每个字符串结束时都以\0
所以在读取的时候不能只读三个,会乱码
FILE *fp = fopen(“a.txt”,”r”);
//a.txt里存放的是中文
错误代码如:
char ch[3] ; fgets(ch,3, fp); printf("%s\n",ch);
正确代码如:
char ch[4] ; fgets(ch,4, fp); printf("%s\n",ch);
七、示例代码1
#include <stdio.h> #include <string.h> int main(int argc, const char * argv[]) { //定义文件指针 FILE *fw = NULL; fw = fopen("a.txt", "w"); char ch[7] = "abcdefg"; if (fw != NULL) { //写入 for(int i = 0 ; i <strlen(ch); i ++ ){ printf("%c\t",ch[i]); fputc(ch[i], fw); } }else{ printf("写入失败!"); getchar(); exit(1); } printf("\n"); FILE *fr = NULL; fr = fopen("a.txt", "r"); if(fr != NULL){ char c = fgetc(fr); //读取 while(c != EOF){ putchar(c); c = fgetc(fr); } }else{ printf("读取失败!"); getchar(); exit(1); } //fclose(fw); //fclose(fr); printf("\n"); return 0; }
七、示例代码2
#include <stdio.h> #include <string.h> int main(int argc, const char * argv[]) { //定义文件指针 FILE *fp = NULL; fp = fopen("a.txt", "a+"); if (fp != NULL) { //写入 printf("请输入字符"); char ch = getchar(); int count = 0; while(ch !='\n'){ count ++; fputc(ch,fp); ch = getchar(); } fclose(fp); printf("\n"); //把指针移到开始位置 rewind(fp); //读取数据 ch = fgets(fp); while(ch != EOF){ putchar(ch); ch = fgets(fp); } }else{ printf("写入失败!"); getchar(); exit(1); } printf("\n"); return 0; }
八、fread与fwrite函数
1)fread(buffer,size,count,fp);
2)fwrite(buffer,size,count,fp):
示例代码:
fwrite写入数据
FILE *fp =fopen("a.txt","wb"); if(fp !=NULL){ char *ch = "kkkkkkk\n"; fwrite(ch,1,strlen(ch),fp); fwrite(ch,1,strlen(ch),fp); }else{ printf("写入失败!"); getchar(); exit(1); } fclose(fp);
fread读取数据
FILE *fp =fopen("a.txt","rb"); if(fp !=NULL){ char ch[100]; fread(ch,1,sizeof(ch),fp); printf("%s\n",ch); }else{ printf("写入失败!"); getchar(); exit(1); } fclose(fp);
九、结构体的读写
#include <stdio.h> struct Student{ char name[20]; int age; float score; }; int main(int argc, const char * argv[]) { // 定义数组 struct Student stu[3] ={{"tom",22,89},{"kite",34,67},{"jelly",21,90}}; FILE *fp = fopen("stu.data", "wb+"); if(fp !=NULL){ for(int i =0; i < 3; i++){ fwrite(&stu[i],sizeof(struct Student),1,fp); } printf("写入成功!\n"); rewind(fp); struct Student s[3]; for(int i = 0; i < 3; i++){ fread(&s[i],sizeof(struct Student),1,fp); printf("%s\t",s[i].name); } } fclose(fp); printf("\n\n"); return 0; }
十、fscanf和fprintf的用法
示例1
#include <stdio.h> int main(int argc, const char * argv[]) { // 写入 9##2;到文件 test.txt int a = 9; int b = 2; FILE *fp = fopen("text.txt","w+"); if(fp != NULL){ fprintf(fp, "%d##%d;", a,b); rewind(fp); int m=0; int n=0; fscanf(fp, "%d##%d;",&m,&n); printf("m=%d,n=%d",m,n); } printf("\n"); return 0; }
示例2
#include <stdio.h> /** 读写如下文件 1,2# 3,4# 5,6# */ int main(int argc, const char * argv[]) { // 定义数组 char ch[3][2] = {1,2,3,4,5,6}; //定义指针 FILE *fp = fopen("a.txt", "w+"); // if (fp!=NULL) { //写入 for (int i = 0; i <3; i ++) { fprintf(fp, "%d,%d#",ch[i][0],ch[i][1]); } printf("写入成功\n"); rewind(fp); //读取 int arr[3][2]; for (int i = 0; i <3; i ++) { fscanf(fp, "%d,%d#",&arr[i][0],&arr[i][1]); printf("%d,%d",arr[i][0],arr[i][1]); } } fclose(fp); return 0; }
十一、文件随机读取,定位fseek
fseek(fp,curPosition,headPosition);
如:fseek(fp,100L,0);
文件首:SEEK_SET 0
当前位置:SEEK_CUR 1
文件尾部:SEEK_END 2
示例:读取第二个学生的成绩
#include <stdio.h> struct Student{ char name[20]; int age; float score; }; int main(int argc, const char * argv[]) { // 定义数组 struct Student stu[3] ={{"tom",22,89},{"kite",34,67},{"jelly",21,90}}; FILE *fp = fopen("stu.data", "wb+"); if(fp !=NULL){ for(int i =0; i < 3; i++){ fwrite(&stu[i],sizeof(struct Student),1,fp); } printf("写入成功!\n"); //定位到第二个学生 fseek(fp,sizeof(struct Student),SEEK_SET); fread(&stu,sizeof(struct Student),1,fp); printf("%s\t",stu.name); } } fclose(fp); printf("\n\n"); return 0; }
相关文章推荐
- tomcat启动时报:IOException while loading persisted sessions: java.io.EOFException的解决方案
- strut2日期表单回显格式设置
- 双连通分量知识点讲解
- uboot学习笔记(1.2点亮LED灯)
- hdu 2851 dijkstra算法变形
- UVa 12166(字符型二叉树的dfs)
- JavaScript继承学习笔记
- [转]iOS学习笔记(2)--Xcode6.1创建仅xib文件无storyboard的hello world应用
- centOS7配置
- A记录和CNAME记录的区别
- 魔兽改键
- 安卓入门--目录结构详解
- 浅析人脸检测之Haar分类器方法
- adapter的重用
- HDOJ 2049 不容易系列之(4)——考新郎
- 第十周第十一周项目2(2)
- C语言中 float double在内存中的存储
- OK6410-A开发板学习-⑦uboot移植(4) uboot起不来问题
- postgresql事务提交
- Android网络框架httplite使用指南