huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


一 打开文件或创建文件


如何创建(打开)一个txt文档?
注意:添加stdio.h
首先创建一个变量*fp用于操作:

FILE *fp;

然后用fopen创建文件,如果文件已有,则打开该文件:

fp=fopen("d:\\test.txt","wb");

其中wb是其中一种模式,还有很多种:

PS:参数介绍来自https://blog.csdn.net/sdujava2011/article/details/68065592
r 打开只读文件,该文件必须存在
  r+ 打开可读写的文件,该文件必须存在。
  rb+ 读写打开一个二进制文件,只允许读写数据。
  rt+ 读写打开一个文本文件,允许读和写。
  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
  wb 只写打开或新建一个二进制文件;,若文件存在则文件长度清为零,即该文件内容会消失;只允许写数据。
  wb+ 读写打开或建立一个二进制文件,,若文件存在则文件长度清为零,即该文件内容会消失;允许读和写。
  wt+ 读写打开或着建立一个文本文件;,若文件存在则文件长度清为零,即该文件内容会消失;允许读写。

  at+ 读写打开一个文本文件,允许读或在文本末追加数据。
  ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
  上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask
值。
  有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+",“w+”,“a+”,而用"rw",“wr”,"ar"等,读者注意所用系统的规定。

可以按照自己的需要使用参数。


如果打开文件失败,fopen将返回0!

if((fp=fopen("c:\\hzk16","rb"))==NULL)    //如果打开失败
    return 0;

注意!!使用fopen创建文件时,若文件路径中包含文件夹,则文件夹必须是已经创建好的,因为fopen不会替你创建文件夹,一旦文件路径中的文件夹不存在,则会创建失败。

要想创建文件夹,可以先包含头文件stdlib.h,然后使用

system("md d:\\mydir");

就可以了。


二 写入信息


写入信息,使用fputs:

fputs("Great!",fp);//往文件 中输入“Great!”。

这样就好了,运行程序后可以在D盘找到文件。

如果程序在此处就结束的话,记得加上代码:

fclose(fp);//关闭文件

因为用fopen打开了文件,那也要关掉。


写入数据还有另一个函数fwrite,其用法和fread很相似(fread下面有讲):

char TXT[20];//将要写入的信息存储在变量TXT中
sprintf(TXT,"HELLO WORLD");//给TXT赋值
fwrite(TXT,sizeof(TXT),1,fp);
/*
参数中:
TXT:将要写入的数据在TXT这个变量里
sizeof(TXT):写入sizeof(TXT)字节的数据
1:写入1次
fp:写入fp所指向的文件中
*/

三 读入信息


读入信息需要使用fread函数:

char TXT[20];//TXT是用于接收读入信息的变量
fread(TXT,sizeof(TXT),1,fp);
/*
参数中:
TXT:将读入的数据保存在TXT这个变量里
sizeof(TXT):从这个文件中读入sizeof(TXT)字节的数据
1:读入1次
fp:要从fp所指向的文件中读取
*/

使用fread函数需要注意两点:

 · 第三个参数表示读入几次。假如第二个参数是2,表示每次读入两个字节,第三个参数是3,表示读入三次,那么一共会读入该文件的2*3=6个字节。如果要读多次,那么第一次读完之后,第二次从刚才读到的字节的后一个字节开始读。

 · 从文件里读入指定字节的数据,从哪里开始读呢?fread第一次运行时,从文件开头读取,第n次运行时,接着上一次读取的位置继续往后读取,也就是一直往后读,不会每一次都从头开始。



四 设置读取位置


第三点所讲述的fread函数的两个注意事项中第二点提到:fread第一次运行时,从文件开头读取,第n次运行时,接着上一次读取的位置继续往后读取。

那么当我们需要从文件的指定位置开始读取时,需要使用fseek函数:

fseek(fp,2,SEEK_SET);
//设置为从fp所指向的文件的第二个字节开始读取
/*
参数中:
fp:要读取fp所指向的文件
2:从某个方向数的第二个字节开始读
SEEK_SET:模式为从头开始
*/

上面这个代码的意思就是:

下一次再读fp所指向的这个文件的时候,从从头开始的第二个字节的地方开始读取。

fseek函数的第三个参数表示模式,有三种模式供你选择:

1 SEEK_SET 从头开始

2 SEEK_CUR 从当前所读到的位置开始

3 SEEK_END 从末尾往头数

那么:

fseek(fp,2,SEEK_SET);
//下一次从第二个字节开始读

fseek(fp,2,SEEK_CUR);
//假设现在读到了该文件的第五个字节,下一次从第七个字节开始读

fseek(fp,2,SEEK_END);
//假设该文件有10个字节,下一次从第八个字节开始读


注意:fseek所设置的位置既是将要读入的位置,也是将要写入的位置。


记得,用完文件时:

fclose(fp);//关闭文件




返回首页


Copyright (C) 2018-2024 huidong