当前位置: 代码迷 >> 综合 >> C语言-文件读写操作
  详细解决方案

C语言-文件读写操作

热度:56   发布时间:2024-01-29 13:24:43.0

C语言操作文件的函数是定义在stdio.h头文件中的一个结构体;
fileopen()函数用来打开一个文件如下代码:

FILF * fopen(char *filename, char*model);

打开方式有很多种如下所示:

  1. r 以只读方式打开文件,只允许读取,不允许写入,文件必须存在
  2. r+ 以读/写方式打开文件,允许读取和写入。该文件必须存在。
  3. rb+ 以读/写方式打开一个二进制文件,允许读/写数据。
  4. w 以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
  5. w+ 以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  6. a以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
  7. a+ 以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留。
  8. wb 以只写方式打开或新建一个二进制文件,只允许写数据。
  9. wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。
  10. ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。

注意点

文件打开方式由r、w、a、b、+ 六个字符拼成,各字符的含义是:
r(read):读
w(write):写
a(append):追加
b(banary):二进制文件
+:读和写


DEMO

//读取文件01.txt
FILE* pFile = fopen("01.txt", "r");

二进制模式
//rb,wb,ab

//读取文件01.txt
FILE* pFile = fopen("01.txt", "rb");

写入文件,fwrite

	FILE* pFile = fopen("01.txt", "w");char* str = "C语言";//fwrite的返回值,0写入失败 , 成功返回字符个数*字符大小int a = fwrite(str, sizeof(char), strlen(str), pFile);fclose(pFile);//关闭文件并保存

注:FILE* pFile = fopen(“01.txt”, “w”);//会将文件内容清空
当要读文件时,不可以w,会清空文件内容

读取文件,fread
//读多个字符

//读文件,r或a  不可以w,会清空文件内容FILE* pFile = fopen("03.txt", "r");char str[20] = { 0 };//用于存储文件中读取出的内容,要记住设置默认为\0//fread 返回值  每次读取字符后,整体长度变小//文件中没有字符,返回0//文件中有字符,且读取字符个数无论是否大于文件中总的字符个数,都返回读取字符个数int n = fread(str, sizeof(char), 2, pFile);//文件中的内容存储的字符数组str中,2表示每次读取文件的字符个数

 

读取文件,fread
//文件所有内容

	FILE* pFile = fopen("03.txt", "r");char str[20] = { 0 };//用于存储文件中读取出的内容,要记住设置默认为\0int a;while ( a = fread(str, sizeof(char), 1, pFile) )//文件内容为空时,a = 0{printf("%s", str);}fclose(pFile);

 

结构体操作

	struct node{int num;char name[15];double height;int age;};int main(void){//结构体写入文件struct node n = { 123, "jkl", 178.2, 22 };//printf("%d\t%s\t%lf\t%d", n.num, n.name, n.height, n.age);FILE* pFile = fopen("05.txt", "r");//fwrite(&n, sizeof(n), 1, pFile);struct node n2;fread(&n2, sizeof(n2), 1, pFile);printf("%d\t%s\t%lf\t%d", n2.num, n2.name, n2.height, n2.age);fclose(pFile);}

 

fgets读取文件一行和fputs写入文件一行

	//fputs写入文件一行FILE* pFile = fopen("06.txt", "w");fputs("Hello\n", pFile);fputs("World", pFile);fclose(pFile);//fgets读取文件一行FILE* pFile2 = fopen("06.txt", "r");char str[10] = { 0 };fgets(str, 10, pFile2);fgets(str, 10, pFile2);fclose(pFile2);

fprintf和fscanf

fscanf(可以从一个文件流中格式化读出数据,遇到空格或回车就停止)
fprintf(可以向一个文件中格式化写入数据)

	FILE* pfile = fopen("07.txt", "r");//fprintf按照某种格式写入文件,读取时也按照某种格式fprintf(pfile,“%d %d”,123456,789);//将123456和789写到test.txt文件中fprintf(pfile,"%s %s","China","ChongQing"); //将字符串China和ChongQing追加写到test.txt文件中int n = 0;char str[20] = { 0 };double d = 0.0;fscanf(pfile, "%d %s %lf", &n, &str, &d);fclose(pfile);

 

看这个:完结散花!

#include<stdio.h>
#define TXT_FILE "/Users/dianju/Desktop/位图测试修改/CTest/CTest/文本文件.text"
int main(){FILE *fp;char ch;//文件以追加的方式打开,并判断是否成功if( (fp=fopen(TXT_FILE,"a+")) == NULL ){printf("Cannot open file, press any key to exit!\n");exit(1);}printf("Input a string:\n");//每次从键盘读取一个字符并写入文件while ( (ch=getchar()) != '\n' ){fputc(ch,fp);}fclose(fp);return 0;
} 

ps:还有那些feek() frewind()函数等等不常考,遇到一个积累一个。

  相关解决方案