今天就不归纳指针的内容了,再研究指针的问题我话要晕死。今天就把前天关于文件IO的操作整理了下。
文件与操作
文件里采用二进制方式记录数字,文本文件里的所有二进制数据都来自于字符,文本文件以外的所有文件叫二进制文本。所有文件都可以采用二进制方式进行操作给机器用的用二进制方式记录,给人用的用文本方式记录。
文件操作步骤
1.打开文件(fopen)
2.操作文件(fread/fwrite)
3.关闭文件(fclose);
第一步,打开文件
FILE *fopen(const char *path, const char *mode);
fopen函数需要两个参数
1.代表要打开的文件路径
2.代表打开文件的方式(决定程序中可以对文件做什么操作)
打开方式有如下选择
"r" 以只读方式打开文件,文件必须存在,否则打开失败
"r+" 以读写方式打开文件,文件必须存在,否则打开失败
"w" 以只写方式打开文件如果文件不存在则创建文件,如果文件已经存在,则删除里面所有内容(使用的时候要注意)
"w+" 比"w"多了功能
"a" 只读方式打开文件,只能在文件末尾添加如果文件不存在则创建新文件
如果文件存在,不对原有内容做任何修改
"a+" 比"a"多了查看功能
"b"也是一种打开方式,它可以和上面任何一种打开方式混合使用,这种方式表示以二进制的方式对文件进行操作。fopen函数的返回值是文件指针,只有文件指针才可以在程序代表打开的文件。
fopen函数有可能失败,如果失败则返回值是NULL,具体操作如下
例 一 :
#include <stdio.h>
int main()
{
//以只读方式打开a.txt文件,打开失败返回NULL
FILE *p_file = fopen("a.txt", "w");
//打开成功时候,条件为真
if (NULL != p_file)
{
//关闭一个文件
fclose(p_file);
//把文件指针变为一个空指针
p_file = NULL;
}
return 0;
}
一旦完成对文件的所有操作,就必须使用fclose函数关闭文件,fclose函数需要文件指针作为参数,文件关闭后文件指针称为野指针,必须回复成空指针。
第二步,文件操作
文件操作分成两种
1.把内存中一组连续存储区的内容拷贝到文件里(写文件)
2.把文件中一组连续存储区的内容拷贝到内存里(读文件)
fread函数对文件采用二进制方式进行读操作
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fwrite函数可以对文件采用二进制方式进行写操作
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
这两个函数都需要以下四个参数
1.内存中第一个存储区的地址
2.内存中单个存储区的大小
3.希望操作的存储区个数
4.文件指针
下面的例子演示以下这2个函数
例 二 :
/*
用二进制方式实现对文件的拷贝
*/
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
if (argc < 3)
{
printf("格式:执行文件 源文件 目标文件\n");
return -1;
}
//以只读方式打开源文件,对源文件进行二进制操作
FILE *p_sou = fopen(argv[1], "rb");
//判断源文件打开是否成功
if (NULL != p_sou)
{
//以只写方式打开目标文件,对目标文件进行二进制操作,如果文件不存在则创建一个,存在则清空目标文件
FILE *p_des = fopen(argv[2], "wb");
//判断目标文件打开是否成功
if (NULL == p_des)
{
printf("目标文件打开失败\n");
fclose(p_sou);
return -1;
}
//提供一个缓冲区
char buf[1024] = {};
//把源文件内容读进buf中,返回值为0表示没内容可读
while (0 != fread(buf, sizeof(char), sizeof(buf), p_sou))
{
//把buf中内容写到目标文件中
fwrite(buf, sizeof(char), strlen(buf), p_des);
}
//最后就是关闭文件,把文件制作恢复为空指针
fclose(p_sou);
p_sou = NULL;
fclose(p_des);
p_des = NULL;
}
}
要注意的是,操作完成后一定要关闭文件,然后把文件制作恢复为空指针,要不可能会带来意想不到的问题
第三步,关闭文件
使用fclose函数关闭文件,千万不能省略的一步!里面的参数就是open函数的返回的文件指针。关闭文件后,还需要把该文件制作恢复成空指针!
下面再简单介绍几个文件的操作函数
rewind函数可以把文件操作位置调整成文件的开头。
ftell函数可以计算当前文件的操作位置。
fseek函数可以把当前文件读写位置调整到文件中的任何地方。
fgets可以从文件中读取一行内容。
fputs可以向文件中写一行内容。
fprintf可以格式化的向文件输出内容。
fscanf可以格式化的从文件中读取内容。
其中fprintf和fscanf会比较常用
例 三 :
<p><span style="color:blue;">#include</span> <span style="color:rgb(163, 21, 21);"><stdio.h></span></p><p><span style="color:blue;">#include</span> <span style="color:rgb(163, 21, 21);"><string.h></span></p><p><span style="color:blue;">#include</span> <span style="color:rgb(163, 21, 21);"><stdlib.h></span></p><p> </p><p><span style="color:blue;">int</span> main()</p><p>{</p><p> //只读方式打开一个文件</p><p> FILE *p_file = fopen(<span style="color:rgb(163, 21, 21);">"abc.txt"</span>, <span style="color:rgb(163, 21, 21);">"w"</span>);</p><p> //如果打开失败结束程序</p><p> <span style="color:blue;">if</span>(NULL == p_file)</p><p> {</p><p> perror(<span style="color:rgb(163, 21, 21);">"open failed"</span>),exit(-1);</p><p> }</p><p> </p><p> printf(<span style="color:rgb(163, 21, 21);">"%d %d %d\n"</span>, 34, 67, 29);</p><p> //把34,67,29用字符的方式打印到文件abc.txt当中</p><p> fprintf(p_file, <span style="color:rgb(163, 21, 21);">"%d%d%d"</span>, 34, 67, 29);</p><p> </p><p> //关闭文件</p><p> fclose(p_file);</p><p> p_file = NULL;</p><p> </p><p> <span style="color:blue;">return</span>0;</p><p>}</p>
<p><span style="color:blue;">#include</span> <span style="color:rgb(163, 21, 21);"><stdio.h></span></p><p> </p><p><span style="color:blue;">int</span> main()</p><p>{</p><p> FILE *p_file = fopen(<span style="color:rgb(163, 21, 21);">"abc.txt"</span>, <span style="color:rgb(163, 21, 21);">"r"</span>);</p><p> <span style="color:blue;">if</span>(NULL != p_file)</p><p> {</p><p> <span style="color:blue;">int</span> num = 0;</p><p> <span style="color:blue;">int</span> num1 = 0;</p><p> <span style="color:blue;">int</span> num2 = 0;</p><p> //把刚才的abc,txt文件上的3个字符,用十进制的方式分别赋值给num, num1, num2</p><p> fscanf(p_file, <span style="color:rgb(163, 21, 21);">"%d%d%d"</span>, &num,&num1, &num2);</p><p> //然后在显示屏上打印一下,看是不是文件中的3个数字</p><p> printf(<span style="color:rgb(163, 21, 21);">"%d %d %d\n"</span>, num, num1, num2);</p><p> //啰嗦的说一句,文件操作完成后一定要关闭文件,然后把文件制作恢复成空指针</p><p> fclose(p_file);</p><p> p_file = NULL;</p><p> }</p><p> </p><p> <span style="color:blue;">return</span>0;</p><p>}</p>
以上就是fscanf和fprintf函数的示范,今天就到此为止,有点累了,过两天会把数据类型的笔记整理出来