C :文件
一直没有系统学习过该章节,现参考《C语言程序设计 (第四版)谭浩强》
C文件基本知识
什么是文件



文件名

文件的分类


文件缓冲区

文件类型指针

typedef struct
{
short level; // 缓冲区“满”或“空”的程度
unsigned flags; // 文件状态标志
char fd; // 文件描述符
unsigned char hold; // 如缓冲区无内存不读取字符
short bsize; // 缓冲区的大小
unsigned char* buffer; // 数据缓冲区的位置
unsigned char* curp; // 指针当前的指向
unsigned istemp; // 临时文件指示器
short token; // 用于有效性检查
};FILE


文件打开与关闭

fopen




if ((fp = fopen("lena.bmp", "r")) == NULL)
{
printf("不能打开文件!\n");
exit(0); // 关闭所有文件,终止正在执行的程序,待用户检查出错误后,修改后重新运行z
}

fclose


顺序读写数据文件

如何向文件中读写一个字符


#include <stdio.h>
#include <windows.h>
int main()
{
FILE* fp = NULL; char ch, filename[10];
printf("请输入文件名:");
scanf("%s", filename);
if ((fp = fopen("filename", "w")) == NULL)
{
printf("不能打开文件!\n");
exit(0);
}
ch = getchar(); // 每次接收一个字符
while (ch != '#') // 当输入#时结束循环
{
fputc(ch, fp); // 向磁盘文件中输出一个字符
putchar(ch); // 将输出的字符显示在屏幕上
ch = getchar(); //继续接收输入的字符
} fclose(fp);
putchar(10); // 想屏幕输出换行符 return 0;
}

#include <stdio.h>
#include <windows.h> void main()
{
FILE *in,*out; char ch,infile[10],outfile[10];
printf("请输入读入的文件名:");
scanf("%s", infile);
printf("请输入输出的文件名:");
scanf("%s", outfile); if ((in = fopen(infile, "r")) == NULL)
{
printf("不能打开文件!\n");
exit(0);
}
if ((out = fopen(outfile, "w")) == NULL)
{
printf("不能打开文件!\n");
exit(0);
}
while (!feof(in)) // feof(in)检查in所指向的文件是否结束,feof:检查到文件读写位置标记是否移动到文件的末尾
{
ch = fgetc(in); // 从输入文件中读入一个字符,暂时存放在ch
fputc(ch, out); //将ch输出到文件中
putchar(ch); //将字符显示在屏幕上
}
putchar(10); // 想屏幕输出换行符
fclose(in);
fclose(out);
}
补充:
1、以上程序是按文本文件方式处理的,也可以用此程序来复制一个二进制文件,只需将fopen函数中的参数换为:“rb”和“wb”
2、C系统将fputc和fgetc函数定义为宏名putc和getc:

如何向文件中读写一个字符串



#include <stdio.h>
#include <windows.h>
#include <string.h> void main()
{
FILE* fp;
char str[3][10], temp[10]; // str存放字符串的二维数组,temp是临时数组
int i, j, k, n = 3;
printf("请输入字符串:\n");
for (i = 0; i < n; i++)
{
gets(str[i]); // 输入字符串
} for (i = 0; i < n - 1; i++) // 选择法对字符串进行排序
{
k = i;
for (j = i + 1; j < n; j++)
{
if (strcmp(str[k], str[j]) > 0) // strcmp:按字母大小比较两个字符串,相同返回0,否则返回1
k = j;
}
if (k != i)
{
strcpy(temp, str[i]); // strcpy:复制字符串
strcpy(str[i], str[k]);
strcpy(str[k], temp);
}
}
if ((fp = fopen("s.txt", "w")) == NULL)
{
printf("不能打开文件!\n");
exit(0);
}
printf("新的序列为:\n"); for (i = 0; i < n; i++)
{
fputs(str[i], fp); // 向文件中写入一个字符串,然后输出一个换行符
fputs("\n", fp);
printf("%s\n", str[i]);
}
}
格式化方式读写文件


二进制方式向文件读写一组数据

随机读写数据文件

文件位置标记及其定位
1、文件位置标记


2、文件位置标记的定位


#include <stdio.h>
#include <windows.h>
#include <string.h> void main()
{
FILE* fp1, * fp2;
fp1 = fopen("pam.txt", "r"); //打开输入文件
fp2 = fopen("s.txt", "w"); // 打开输出文件
while (!feof(fp1))
{
putchar(getc(fp1)); // 逐个读入字符输出到屏幕上
}
putchar(10);
rewind(fp1); // 使文件位置标记返回文件头
while (!feof(fp1))
{
putc(getc(fp1), fp2); // 从文件头重新逐个读字符,输出到另外一个文件中
}
fclose(fp1);
fclose(fp2);
}

vfgrt67
随机读写的出错检测
ferror


clearerr

C :文件的更多相关文章
- Mapreduce的文件和hbase共同输入
Mapreduce的文件和hbase共同输入 package duogemap; import java.io.IOException; import org.apache.hadoop.co ...
- mapreduce多文件输出的两方法
mapreduce多文件输出的两方法 package duogemap; import java.io.IOException; import org.apache.hadoop.conf ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- SQLSERVER将一个文件组的数据移动到另一个文件组
SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- C# ini文件操作【源码下载】
介绍C#如何对ini文件进行读写操作,C#可以通过调用[kernel32.dll]文件中的 WritePrivateProfileString()和GetPrivateProfileString()函 ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- GreenDao 数据库:使用Raw文件夹下的数据库文件以及数据库升级
一.使用Raw文件夹下的数据库文件 在使用GreenDao框架时,数据库和数据表都是根据生成的框架代码来自动创建的,从生成的DaoMaster中的OpenHelper类可以看出: public sta ...
随机推荐
- 经典C语言题目——打印罗汉塔图形
打印如下图形: ++++1 +++22 ++333 +4444 55555 点击查看代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...
- php orm的C扩展 ycdatabase
背景:昨天看了ice框架后,感觉运行效率非常高,与其差不多的就是yaf了,然后因为yaf没有orm有点遗憾,不过我就这样去找了找orm,产生了这样的感想 今天又看了一下yaf框架,确实和ice差不多, ...
- OpenResty之resty.limit.count 模块介绍
resty.limit.count 模块介绍: resty.limit.count 模块就是限制接口单位时间的请求数,This module depends on lua-resty-core模块,所 ...
- 程序员遇到bug时常见的30种反应
开发应用程序是一项压力很大的工作,人无完人,工作中遇到bug是很正常的事,有些程序员会生气,沮丧,郁闷,甚至泄气,也有一些程序员则会比较淡定.如何进行修复bug的过程,是值得我们好好推敲的. 我想分享 ...
- Redis中常见的延迟问题
使用复杂度高的命令 Redis提供了慢日志命令的统计功能 首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢日 ...
- K8S钩子、探针以及控制器完整版
一. 生命周期钩子 Kubernetes 中的 生命周期钩子(Lifecycle Hooks) 是在容器生命周期的特定阶段执行操作的机制.通过钩子,可以在容器启动后(PostStart)或停止前(Pr ...
- ChatGPT生成测试用例的最佳实践(一)
前面介绍的案例主要展示了ChatGPT在功能.安全和性能测试用例生成方面的应用和成果.通过ChatGPT生成测试用例,测试团队不仅可以提升工作效率,还可以加快测试工作的速度,尽早发现被测系统中的问题. ...
- HttpClient初步理解
昨天做完网站项目,就立刻接到了接口的项目,遇到了httpclient,因为毕业不久,遇到这块所以特此留下理解 HttpClient介绍 概念: HTTP 协议可能是现在 Internet 上使用得最多 ...
- TaurusDB库表时间点极速恢复,大幅缩短数据恢复时间
经过多组实验对比,对于大实例下仅需恢复几张表数据的情况,有显著优化效果.尤其针对游戏业务等需要频繁回档的场景,将大幅度缩短因数据恢复导致的停服时间.后续我们将逐步在公有云上开放此特性,以惠及更多用户. ...
- 体验.NET与文件存储服务MinIO
对象文件存储服务(OSS)主要用于存储零散的文件,和直接存储到本地文件系统中相比,有以下的几个优势: 跨服务器可用 兼容Amazon S3 API 横向扩容 高可用 支持加密 MinIO就是一个高性能 ...