目录
C语言-文件操作2
文本文件的读取
实际开发中,文本文件以行为单位存放字符串。
C语言程序,一般按行写入或读取数据。
1.向文件中写入数据
C语言向文件写入数据的库函数有fputc、fputs、fprintf,实际开发中一般使用fprintf.
函数声明:
int fprintf(FILE *fp, const char *format, ...);
fprintf函数的用法与printf相同,只是多了第一个参数文件指针,表示把数据输出到文件。
用法:
#include<stdio.h> int main() { int ii = 0; FILE *fp = 0; //定义文件指针变量fp //以只写的方式打开文件 if ((fp = fopen("C:\\Users\\Administrator\\Desktop", "wt")) == 0) { printf("fopen(C:\\Users\\Administrator\\Desktop\\test.txt) failed.\n"); return -1; } for (ii = 0; ii < 5; ii++) { fprintf(fp, "这是第%d条数据。\n", ii+1); } //关闭文件 fclose(fp); return 0; }
2.从文件中读取数据
C语言从文件中读取数据的库函数有fgetc、fgets、fscanf,实际开发中一般使用fgets.
函数功能:从文件中读取一行。
函数声明:
char *fgets(char *buf, int size, FILE *fp);
参数介绍:
buf:字符串,用于保存从文件中读取的数据。
size:字符串最大长度,一般写sizeof(buf)。
fp:待读取文件的文件指针。
读取方式:
如果某行内容长度小于size,fgets函数就读取一行;
如果某行内容长度大于size,fgets函数就读取size-1个字节。
成功返回buf,失败返回空;一般情况失败返回空是因为文件结束。
用法:
#include<stdio.h> #include<string.h> int main() { FILE *fp = 0; //定义文件指针变量fp char strbuf[301]; //存放从文件读取到的一行内容 //以只读的方式打开文件 if ((fp = fopen("C:\\Users\\Administrator\\Desktop", "rt")) == 0) { printf("fopen(C:\\Users\\Administrator\\Desktop\\test.txt) failed.\n"); return -1; } //逐行读取文件的内容,输出到屏幕 while (1) { memset(strbuf, 0, sizeof(strbuf)); if (fgets(strbuf, 301, fp) == 0) break; printf("%s",strbuf); } //关闭文件 fclose(fp); return 0; }
小知识:
memset介绍:memset() 的作用是在一段内存块中填充某个给定的值。
buf尽量设置大一点,确保读取一个完整的行。
二进制文件的读写
二进制文件的读写是直接把内存中的数据结构写入二进制文件或者读取一块数据。
1.向文件中写入数据
C语言一般用库函数fwrite()向文件中写入块数据。
函数声明:
size_t fwrite(const void *ptr, size_t size,size_t nmemb, FILE *stream);
参数说明:
ptr:为内存区块的指针,存放了要写入数据的地址,它可以是数组、变量、结构体等。
size:固定填1。
nmemb:表示写入数据的字节数。
fp:表示文件指针。
函数的返回值是本次写入数据的字节数。
用法:
#include<stdio.h> #include<string.h> struct st_girl { char name[50]; //姓名 int age; //年龄 int height; //身高,单位:厘米cm char sc[30]; //身材,火辣、普通、飞机场 char yz[30]; //颜值,漂亮、一般、歪瓜裂枣 }; int main() { struct st_girl stgirl; //定义超女数据结构变量 FILE *fp = 0; //定义文件指针变量fp // 以只写的方式打开文件 if ((fp = fopen("C:\\Users\\Administrator\\Desktop\\test.dat", "wb")) == 0) { printf("fopen(C:\\Users\\Administrator\\Desktop\\test.dat)faild.\n"); return -1; } //为超女数据结构的成员变量 strcpy(stgirl.name, "西施"); stgirl.age = 18; stgirl.height = 170; strcpy(stgirl.sc, "火辣"); strcpy(stgirl.yz, "漂亮"); //把超女的数据结构写入文件 fwrite(&stgirl, 1, sizeof(struct st_girl), fp); //关闭文件 fclose(fp); return 0; }
2.从文件中读取数据
fread()库函数用来从文件中读取块数据。
函数声明:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp);
ptr:用于存放从文件中读取数据的变量地址,他可以是数组、变量、结构体等。
size:固定填1。
nmemb:表示打算读取数据的字节数。
fp:表示文件指针。
调用fread函数如果成功的读取到内容,函数返回读取到的字节数;
如果读取结束或读取错误,返回空。
用法:
#include<stdio.h> #include<string.h> struct st_girl { char name[50]; //姓名 int age; //年龄 int height; //身高,单位:厘米cm char sc[30]; //身材,火辣、普通、飞机场 char yz[30]; //颜值,漂亮、一般、歪瓜裂枣 }; int main() { struct st_girl stgirl; //定义超女数据结构变量 FILE *fp = 0; //定义文件指针变量fp // 以只写的方式打开文件 if ((fp = fopen("C:\\Users\\Administrator\\Desktop\\test.dat", "wb")) == 0) { printf("fopen(C:\\Users\\Administrator\\Desktop\\test.dat)faild.\n"); return -1; } int ii = 0; fread(&ii, 1, sizeof(ii), fp); printf("ii = %d\n",ii); //为超女数据结构的成员变量 strcpy(stgirl.name, "西施"); stgirl.age = 18; stgirl.height = 170; strcpy(stgirl.sc, "火辣"); strcpy(stgirl.yz, "漂亮"); //把文件内容读取出来,存入stgirl结构体 fwrite(&stgirl, 1, sizeof(struct st_girl), fp); printf("name = %s\n", stgirl.name); printf("age = %d\n", stgirl.age); printf("height = %d\n", stgirl.height); printf("sc = %s\n", stgirl.sc); printf("yz = %s\n",stgirl.yz); //关闭文件 fclose(fp); return 0; }
谢谢观看,欢迎指正。