口碑好的大良网站建设,代理公司注册新公司的费用,免费下载ppt模板的网站有哪些,北京专业做网站的公司͟͟͞͞#x1f3c0;前言上一篇我们加们讲了什么是文件#xff0c;为什么使用文件#xff0c;以及流的概念。我们继续接上一篇来继续讲解我们的文件操作#xff0c;这一篇将会详细的讲如何对文件进行读写。
目录 #x1f680;一.文件的顺序读写
1.fgetc和fputc
2.fget… ͟͟͞͞前言上一篇我们加们讲了什么是文件为什么使用文件以及流的概念。我们继续接上一篇来继续讲解我们的文件操作这一篇将会详细的讲如何对文件进行读写。
目录 一.文件的顺序读写
1.fgetc和fputc
2.fgets和fputs
3. fscanf和fprintf
4. fread和fwerite
✈️二.文件的随机读写
1.fseek
2.ftell
3.rewind
三.结言 一.文件的顺序读写
在文件操作中我们如下几种方式进行读写
函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输入流fgets文本行输入函数所有输入流fputs文本行输出函数所有输入流fscanf格式化输入函数所有输入流fprintf格式化输出函数 所有输入流 fread二进制输入文件fwrite二进制输出文件
这些函数分别两两一组下面来详细的介绍一下他们吧
1.fgetc和fputc int character:像文件中传入的数据。
FILE * stream指向文件的流。 FILE * stream指向文件的流。
int main()
{//打开文件FILE* pf fopen(test.txt, w);if (pf NULL){perror(fopen);}//文件操作char ch 0;scanf(%c, ch);fputc(ch, pf);//关闭文件fclose(pf);pfNULL;return 0;
} fputc就是向文件中输出一个指定的字符。而fgetc就是从文件中输出一个字符。
int main()
{//打开文件FILE* pf fopen(test.txt, r);if (pf NULL){perror(fopen);}//文件操作char ch 0;chfgetc(pf);printf(%c\n, ch);//scanf(%c, ch);//fputc(ch, pf);//关闭文件fclose(pf);pfNULL;return 0;
} 这就是fputc与fgetc的作用了。
2.fgets和fputs const char*str:像文件中输入文本的地址。
FILE * stream指向文件的流。 char*str接收文本的地址。
int num接受文本的个数。
FILE * stream指向文件的流。
fputs的使用
int main()
{FILE* pf fopen(test.txt, w);if (pf NULL){perror(fopen);}fputs(abcdef, pf);fclose(pf);pf NULL;return 0;
} fgets的使用
int main()
{FILE* pf fopen(test.txt, r);if (pf NULL){perror(fopen);}char arr[10] { 0 };fgets(arr,6,pf);printf(%s\n, arr);fclose(pf);pf NULL;return 0;
} 3. fscanf和fprintf
看到这一对函数我们是不是首先就想到了我们常用的scanf和printf那他们有什么区别呢 可以看到相比之下fprintf多了一个参数也就是我们上面提到的指向文件的流。那么使用的话只需要在前面加上这个参数即可。
fprintf的使用
struct stu
{char name[20];int age;float score;
};
int main()
{struct stu stu1 { zhangsan,18,90.5 };FILE* pffopen(test.txt, w);if (pf NULL){perror(fopen);return 1;}fprintf(pf, %s %d %.1f, stu1.name, stu1.age, stu1.score);fclose(pf);pf NULL;return 0;
} 我们可以看到fprintf就是将一个格式化的东西向文件中输出那么fprintf也就是从文件向外面输出了。 同样也是fscanf多了我们上面提到的指向文件的流。
fscanf的使用
struct stu
{char name[20];int age;float score;
};int main()
{struct stu s { 0 };FILE* pf fopen(test.txt, r);if (pf NULL){perror(fopen);return 1;}fscanf(pf, %s %d %f, s.name, (s.age),(s.score));fprintf(stdout, %s %d %.1f, s.name, s.age, s.score);return 0;
} 4. fread和fwerite const void * ptr输入内容的地址。
size_t size单个输入内容的大小。
size_t count输入内容的数量。 FILE * stream指向文件的流。 void * ptr输出内容的地址。
size_t size单个输出内容的大小。
size_t count输出内容的数量。
FILE * stream指向文件的流。
他们两个也就是对二进制进行的文件操作函数。
fwrite的使用
struct stu
{char name[20];int age;float score;
};int main()
{struct stu stu1 { zhangsan,18,90.5 };FILE* pffopen(test.txt, w);if (pf NULL){perror(fopen);return 1;}fwrite(stu1, sizeof(stu1), 1, pf);fclose(pf);pf NULL;return 0;
}我们可以看到文件出现了一些看不懂的乱码由于字符的二进制储存与文本储存方式相同都是一ASCII码的形式也就是说这就是以二进制存储的内容。
fread的使用
struct stu
{char name[20];int age;float score;
};int main()
{struct stu s { 0 };FILE* pf fopen(test.txt, rb);if (pf NULL){perror(fopen);return 1;}fread(s,sizeof(s),1,pf);printf(%s %d %.1f, s.name, s.age, s.score);fclose(pf);pf NULL;return 0;
} ✈️二.文件的随机读写
说到随机我们可能会想到我们的rand函数产生一个随机数。那么我们的随机读写是在任意一个地方去读写吗其实不是的随机读写指的是有很大的主观性我们可以在我们想要读写的地方读写。接下来我们会认识到三个函数分别是fseekftell以及rewind。
1.fseek FILE * stream指向文件的流。
long int offest偏移量。
int origin偏移的地点。第二张图片的内容
SEEK_SET:文件起始位置。
SEEK_CUR:光标所在的位置。
SEEK_END;文件末尾位置。
int main()
{FILE* pf fopen(test.txt, r);if (pf NULL){perror(fopen);return 1;}fseek(pf,2, SEEK_SET);int ch fgetc(pf);printf(%c\n, ch);return 0;
} 2.ftell
在了解了我们的fseek函数之后我们应该怎么去找我们的光标在哪里呢或者是说偏移量是多少我们的ftell函数也就整好解决了这个问题。
ftell返回⽂件指针相对于起始位置的偏移量。 这个函数就简单多了只有一个流的参数。
ftell的使用
int main()
{FILE* pf fopen(test.txt, r);if (pf NULL){perror(fopen);return 1;}fseek(pf,2, SEEK_SET);int ch fgetc(pf);int count ftell(pf);printf(%c\n, ch);printf(count的值是%d\n, count);return 0;
} 3.rewind 这个函数与ftell的参数的相同。作用是将光标回到文件的起始位置。
rewind的使用
int main()
{FILE* pf fopen(test.txt, r);if (pf NULL){perror(fopen);return 1;}fseek(pf,2, SEEK_SET);int ch fgetc(pf);int count ftell(pf);printf(%c\n, ch);printf(count的值是%d\n, count);rewind(pf);count ftell(pf);printf(rewind之后count的值是%d\n, count);return 0;
} 三.结言
我们的文件操作大体就介绍完了如果有喜欢的可以三连哦欢迎大家互相探讨博主会经常发布一些编程语言上的知识以及题感谢大家的支持 ͟͟͟͟͟͟͞͞͞͞͞͞