C语言备忘录 - 19. 文件读写(c语言读写文件的编码格式)
toyiye 2024-09-08 10:02 4 浏览 0 评论
一、fgetc() 与 fputc()
#include <stdio.h>
int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
- fgetc() 用于从文件流中读取下一个字符并推进文件的位置指示器,该函数将读取到的 unsigned char 类型转换为 int 类型并返回;如果文件结束或者遇到错误则返回 EOF。
- fputc() 用于将一个字符写入到指定的文件中并推进文件的位置指示器,如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fpr;
FILE *fpw;
int ch;
/* 以只读模式打开本地 hello.txt 文件 */
if ((fpr = fopen("./hello.txt", "r")) == NULL) {
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
/* 以写入模式打开 hello1.txt 文件,不存在就创建 */
if ((fpw = fopen("./hello1.txt", "w")) == NULL) {
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
/* 循环从文件中读取一个字符 */
while ((ch = fgetc(fpr)) != EOF) {
/* 打印字符到标准输出 */
putchar(ch);
/* 打印字符到 fpw 文件流 */
fputc(ch, fpw);
}
/* 关闭文件 */
fclose(fpr);
fclose(fpw);
return 0;
}
二、fgets() 与 fputs()
#include <stdio.h>
/*
buff:用于存放读取到字符串的缓冲区
size:指定读取的字符数(包括最后自动添加的 '\0')
stream:待操作的文件流
*/
char *fgets(char *buff, int size, FILE *stream);
int fputs(const char *s, FILE *stream);
- fgets() 用于读取字符串到 buff 缓冲区,最多可以读取 size - 1 个字符,因为结尾处会自动添加一个字符串结束符 '\0'。当读取到换行符('\n')或文件结束符(EOF)时,表示结束读取('\n' 会被作为一个合法的字符读取)。如果函数调用成功,返回 buff 参数指向的地址。
- fputs() 用于将一个字符串写入到指定的文件中,表示字符串结尾的 '\0' 不会被一并写入。如果写入成功,它会返回一个非0值,如果发生错误,则会返回 EOF。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fpr;
FILE *fpw;
char str[50];
/* 以只读模式打开本地 hello.txt 文件 */
if ((fpr = fopen("./hello.txt", "r")) == NULL) {
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
/* 以写入模式打开 hello1.txt 文件,不存在就创建 */
if ((fpw = fopen("./hello1.txt", "w")) == NULL) {
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
while (1) {
/* 读取字符串到缓冲区 */
fgets(str, 50, fpr);
/* 文件末尾指示器被设置时结束循环 */
if (feof(fpr)) {
break;
}
/* 打印字符串到标准输出 */
printf("%s", str);
/* 打印字符串到 fpw 文件流 */
fputs(str, fpw);
}
/* 关闭文件 */
fclose(fpr);
fclose(fpw);
return 0;
}
三、fscanf() 与 fprintf()
#include <stdio.h>
/*
format 格式化字符串,由格式化占位符和普通字符组成
... 附加参数
*/
int fscanf(FILE *stream, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
- fscanf() 用于从指定文件中读取格式化字符串。如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。如果函数调用失败,返回值小于附加参数的个数(甚至是 0)。如果读取到标准输入流的结尾处,则返回 EOF。
- fprintf() 用于打印格式化字符串到指定的文件。如果函数调用成功,返回值是实际打印的字符数(不包含表示字符串结束的 '\0');如果函数调用失败,返回值是一个负数。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fpr;
FILE *fpw;
int year, month, day;
/* 以只读模式打开本地 hello.txt 文件 */
if ((fpr = fopen("./hello.txt", "r")) == NULL)
{
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
/* 以写入模式打开 hello1.txt 文件,不存在就创建 */
if ((fpw = fopen("./hello1.txt", "w")) == NULL)
{
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
int ch;
while ((ch = fscanf(fpr, "%d-%d-%d", &year, &month, &day)) != EOF)
{
/* 打印数据到标准输出 */
printf("%d-%d-%d\n", year, month, day);
/* 打印数据到 fpw 文件流*/
fprintf(fpw, "%d-%d-%d\n", year, month, day);
}
/* 关闭文件 */
fclose(fpr);
fclose(fpw);
return 0;
}
四、fread() 与 fwrite()
#include <stdio.h>
/*
ptr:指向存放数据的内存块指针,该内存块的尺寸最小应该是 size * nmemb 个字节
size:指定要读取/写入的每个元素的尺寸,最终尺寸等于 size * nmemb
nmemb:指定要读取/写入的元素个数,最终尺寸等于 size * nmemb
stream:待操作的文件流
*/
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
- fread() 用于从指定的文件中读取指定尺寸的数据。返回实际读取到的元素个数(nmemb);如果返回值比 nmemb 参数的值小,表示可能读取到文件末尾或者有错误发生(可以使用 feof 函数或 ferror 函数进一步判断)。
- fwrite() 用于将指定尺寸的数据写入到指定的文件中。返回实际写入到文件中的元素个数(nmemb);如果返回值与 nmemb 参数的值不同,则有错误发生。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Book
{
char name[50];
char author[50];
};
int main()
{
FILE *fpr;
FILE *fpw;
struct Book *book;
// 为结构体分配堆内存空间
book = (struct Book *)malloc(sizeof(struct Book));
if (book == NULL) {
printf("内存分配失败!\n");
exit(EXIT_FAILURE);
}
strcpy(book->name, "C语言备忘录");
strcpy(book->author, "liwy");
/* 以写入模式打开 hello1.txt 文件,不存在就创建 */
if ((fpw = fopen("./hello.txt", "w")) == NULL) {
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
/* 将数据写入文件 */
fwrite(book, sizeof(struct Book), 1, fpw);
/* 关闭文件 */
fclose(fpw);
/* 以只读模式打开本地 hello.txt 文件 */
if ((fpr = fopen("./hello.txt", "r")) == NULL) {
printf("文件打开失败!");
exit(EXIT_FAILURE);
}
/* 读取指定尺寸的数据 */
fread(book, sizeof(struct Book), 1, fpr);
printf("书名:%s\n", book->name);
printf("作者:%s\n", book->author);
/* 关闭文件 */
fclose(fpr);
return 0;
}
五、IO缓冲区
对于数据流,有三种缓存模式:不缓存,按块缓存和按行缓存。如果输出流设置为不缓存,数据会直接写入目标文件或打印到屏幕上;如果设置为按块缓存,那么数据会先写入到缓存块中;如果设置为按行缓存,那么在接收到换行符('\n')之前,数据都是先缓存在缓冲区的。
1. fflush()
用于将缓冲区内的数据强制写入指定的文件中。
#include <stdio.h>
int fflush(FILE *stream);
如果函数调用成功,返回值是 0;如果函数调用失败,返回 EOF 并设置 errno 为指定的错误。
2. setvbuf()
用于指定一个数据流的缓存模式。
#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
- stream :该参数是一个 FILE 对象的指针,指定一个打开的数据流
- buf :指定一个用户分配的缓冲区,如果该参数为 NULL,那么函数会自动分配一个指定尺寸的缓冲区
- mode :指定数据流的缓存模式:_IOFBF(按块缓存)、_IOLBF(按行缓存)、_IONBF(不缓存)
- size :指定缓冲区的尺寸(字节)
如果函数调用成功,返回值是 0;如果函数调用失败,返回值的是一个非 0 值。
#include <stdio.h>
#include <string.h>
int main(void)
{
char buff[1024];
memset(buff, '\0', sizeof(buff));
/* 按块缓冲,当缓冲区写满时才写入文件 */
setvbuf(stdout, buff, _IOFBF, 1024);
fprintf(stdout, "Hello C!\n");
/* 强制将缓冲区内容写入文件 */
fflush(stdout);
fprintf(stdout, "Hello liwy!\n");
// 阻塞, Hello liwy! 将不会输出
getchar();
return 0;
}
相关推荐
- # Python 3 # Python 3字典Dictionary(1)
-
Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...
- Python第八课:数据类型中的字典及其函数与方法
-
Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...
- Python中字典详解(python 中字典)
-
字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...
- Python3.9又更新了:dict内置新功能,正式版十月见面
-
机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...
- Python3 基本数据类型详解(python三种基本数据类型)
-
文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...
- 一文掌握Python的字典(python字典用法大全)
-
字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...
- 超级完整|Python字典详解(python字典的方法或操作)
-
一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...
- Python3.9版本新特性:字典合并操作的详细解读
-
处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...
- python 自学,字典3(一些例子)(python字典有哪些基本操作)
-
例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...
- Python3.9中的字典合并和更新,几乎影响了所有Python程序员
-
全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...
- Python3大字典:《Python3自学速查手册.pdf》限时下载中
-
最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...
- python学习——字典(python字典基本操作)
-
字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...
- 324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典
-
如何入门学习python...
- Python3.9中的字典合并和更新,了解一下
-
全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...
- python3基础之字典(python中字典的基本操作)
-
字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- # Python 3 # Python 3字典Dictionary(1)
- Python第八课:数据类型中的字典及其函数与方法
- Python中字典详解(python 中字典)
- Python3.9又更新了:dict内置新功能,正式版十月见面
- Python3 基本数据类型详解(python三种基本数据类型)
- 一文掌握Python的字典(python字典用法大全)
- 超级完整|Python字典详解(python字典的方法或操作)
- Python3.9版本新特性:字典合并操作的详细解读
- python 自学,字典3(一些例子)(python字典有哪些基本操作)
- Python3.9中的字典合并和更新,几乎影响了所有Python程序员
- 标签列表
-
- r语言矩阵 (127)
- browsererror (114)
- exportexcel (119)
- cv2.bitwise_not (137)
- dump命令 (128)
- es6concat (126)
- heapify (127)
- java.security.egd (130)
- javax.annotation (117)
- jsstringsplit (117)
- js数字 (115)
- maven编译 (132)
- mysqlleft (128)
- nodejsbuffer (149)
- org.apache.commons.httpclient (126)
- org.jsoup (141)
- org.springframework.web (128)
- robotframework-ride (115)
- setnocounton (141)
- socket.gethostbyname (122)
- sqlmid (121)
- time.strptime (133)
- vscode格式化 (125)
- win32con (129)
- window.localstorage (126)