C语言文件操作

C语言文件操作

文件操作
文本的开辟

1. 在C语言中,规定文件的结构体为FILE,FILE实际上是_iobuf的别名。

struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; };typedef struct _iobuf FILE;

言语中对文本进行操作必须首先打开文件,打开文件根本涉及到fopen函数。fopen函数的原型为

C语言文件操作一

FILE * fopen(const char filename,const
char * mode);

2. 概念2个针对文件的指针。

FILE *fp; //fp指向一个文件

FILE*亚洲城88游戏娱乐, fopen(const char *path,const char *mode)

近段复习C语言文件操作,在原来的书文的功底之上海市总计如下:

文件的打开操作 fopen 打开多个文件

1. fopen();打开文件

  • 函数原型: FILE * fopen(char * Filename,char *Mode);
  • 回来类型是2个FILE*指针
  • Filename 是内需开拓的文本路径
  • Mode 是开辟文件的形式 如下:
标识符 作用
r 只读
w 只写
a 追加
r+ 读和写
w+ 读和写
a+ 读和写
rb 只读
wb 只写
ab 追加
rb+ 读和写
wb+ 读和写
ab+ 读和写
  • 打开文件时相似须要看清是或不是打开成功。

#include <stdio.h>int main(){ FILE* fp; if ((fp = fopen("test.txt", "a+")) == NULL) { printf("打开文件失败!\n"); } return 0;}
  • 开拓文件退步的因由一般有以下四个:a). 使用只读的艺术打开空的文书。b).
    钦定的盘符不设有或然钦定的门径不存在。c).
    文件名包蕴部分闻所未闻的号子 比如123@.txtd).
    有些公文被其余程序占用。

其间path为文件路径,mode为打开药格局

一.文件的概念:

(二种操作文件的结缘)

2.fclose();关闭文件

  • 函数原型:int fclose(FILE *File);

 fclose;
  • 文件打开使用形成之后,必供给关张,幸免数据丢失。

当大家开拓三个文书之后,在文件之中有2个任务指针,用来针对文件当前的读写地方。该指针在文件打开时连连指向第2个字节的。随着大家对文件进行读写的长河,那么些里面地方指针会发生变化。

1)对于文本路径,只需注意若未明朗给出相对路径,则暗许该文件在工程的目录下。若需给出相对路径,则在意转义字符’\\’,比如有文件test.txt存放在C盘根目录下,则文件路径参数值应为C:\\\\test.txt。

   所谓“文件”是指一组有关数据的静止聚集。
那几个数据集有三个称号,叫做文件名。
平常接触到的文书诸如源程序文件、目标文件、可执行文件、库文件
(头文件)等。文件一般是驻留在外部介质(如磁盘等)上的,在利用时才调入内部存款和储蓄器中来。

文本的闭馆操作

1. fseek(); 文件之中指针偏移

  • 函数原型:int fseek(FILE * File, long Offset, int Origin);
  • File 即为文件指针。平日为fp。
  • Offset指的是偏移量,正数向右偏移,负数向做偏移,偏移量为常数,后边平常加上L。
  • Origin 是文本偏移的开端点。0意味文件头 1表示近日任务 2代表文件尾

 fseek(fp, 16L, 0); //从文件头向右偏移16个字节 fseek(fp, -16L, 1); //从当前位置向左偏移16个字节 fseek(fp, 16L, 2); //从文件尾向左偏移16个字节

2)对于mode,首要由r,w,a,+,b,t三个字符组合而成。

二.文本的归类:

int fclose(FILE *fp);

2. rewind(); 重置文件之中指针为文件头。

  • 函数原型:void rewind(FILE *File);

 rewind; //重置文件内部指针为文件头

r:只读格局,文件必须存在

   从分化的角度可对文本作不一致的分类。

fclose 关闭一个文本 

1. fputc(); 和fgetc();

  • 函数原型:

int fputc(int Ch,FILE *File); //把字符Ch写入文件Fileint fgetc(FILE * File); //从文件当前位置读字符
  • 案例:

#include <stdio.h>int main(){ FILE* fp; //定义一个文件指针 if ((fp = fopen("test.txt", "w+")) == NULL) //打开test.txt { printf("打开文件失败!\n"); } char ch = 'j'; //定义一个字符变量ch,初始化为'j' char ch1; fputc; //将ch写入文件 注意:这里的文件内部指针会变化。 rewind; //将变化后的文件内部指针重置为文件头 ch1 = fgetc; //从文件中读出一个字符 存放到ch1中 printf("%c\n", ch1); fclose; //关闭文件 return 0;}

w:只写方式,若文件存在,则原有内容会被铲除;若文件不存在,则会成立文件

1.从用户的角度看,文件可分为普通文书和装备文件两种。

文件的读写操作

2. fputs(); 和fgets();

  • 函数原型:

int fputs(const char* Str, FILE* File); //把字符串Str写入文件Filechar* fgets(char* Buf, int MaxCount, FILE* File); //从文件File中获取MaxCount个字符存放到Buf指向的字符串中,结尾补'\0'。
  • 案例:

#include <stdio.h>int main(){ FILE* fp; //定义一个文件指针 if ((fp = fopen("test.txt", "w+")) == NULL) //打开test.txt { printf("打开文件失败!\n"); } char str[30] = "+qq:380672980"; //定义一个字符串str,初始化为"+qq:380672980" char str1[30]; fputs; //将str写入文件 注意:这里的文件内部指针会变化。 rewind; //将变化后的文件内部指针重置为文件头 fgets(str1,30,fp); //从文件中获取30个字符存放到str1中,结尾补'\0'。 printf("%s\n", str1); fclose; //关闭文件 return 0;}

a:追加情势打开只写文件,只同意举行写操作,若文件存在,则增进的内容放在文件末尾;若不设有,则树立文件

  
普通文书是指驻留在磁盘或其余表面介质上的3个稳步数据集,可以是源文件、指标文件、可执行程序;也足以是一组待输入处理的本来数据,可能是一组输出的结果。对于源文件、目的文件、可执行程序能够称呼程序文件,对输入输出数据可称作数据文件。

读取单个字符

3. fprintf(); 和fscanf();

  • 函数原型:int fprintf(FILE * File, const char * Format, ...);``int fscanf(FILE * File, const char * _Format, ...);
  • 案例:

#include <stdio.h>int main(){ FILE *fp; char str[20] = "C++"; char str1[20] = "Python"; char buf[20]; char buf1[20]; char buf2[20]; if ((fp = fopen("test.txt", "w+")) == NULL) { printf("打开文件失败!"); return 0; } fprintf(fp, "%s Vs %s", str, str1); //把str和str按照"%s Vs %s"的格式写入fp rewind; //重置位置 fscanf(fp, "%s %s %s", buf, buf1, buf2); //读取字符串 printf("%s\n%s\n%s\n", buf, buf1, buf2); //打印 fclose; return 0;}

+:可读可写

  
设备文件是指与主机相联的各类外部设备,如显示器、打字与印刷机、键盘等。在操作系统中,把外部设备也视作是3个文件来拓展保管,把它们的输入、输出等同于对磁盘文件的读和写。经常把显示屏定义为规范输出文件,
一般景色下在显示器上出示有关消息就是向专业输出文件输出。如平时使用的printf,putchar函数就是那类输出。键盘经常被钦命专业的输入文件,从键盘上输入就意味着从正式输入文件上输入数据,scanf,getchar函数就属于那类输入。

fgetc 从文件中读取1个字符 int fgetc(FILE
*C语言文件操作。 fp);

4. fread(); 和fwrite();

  • 函数原型:

//从字符串往文件写 Size大小,写Count次。size_t fwrite(const void * Str, size_t Size,size_t Count, FILE * File);//从文件中每次读取ElementSize个字符,一共读取Count次。size_t fread(const void * DstBuf, size_t ElementSize,size_t Count, FILE * File);
  • 案例:

#include <stdio.h>int main(){ FILE *fp; char str[100] = "Is everyone here taday"; char str1[100]; if ((fp = fopen("test.txt", "w+")) == NULL) { printf("打开文件失败!"); return 0; } fwrite(str, 3, 8, fp); rewind; fread(str1, 1, 23, fp); printf("%s\n", str1); fclose; return 0;}

b:以二进制格局打开文件

2.从文件编码的不二法门来看,文件可分为ASCII码文件和二进制码文件两种。

fputc 写1个字符到文件中去 int fput(int
c,FILE * fp); 

t:以文件方式打开文件(暗中同意方式下以文件格局打开文件)

  
ASCII文件也称之为文本文件,那种文件在磁盘中存放时每一个字符对应1个字节,用于存放对应的ASCII码。例如,数5678的积存方式为:

读取字符串  

上面是广大的咬合:

ASCII码: 0011010100110110 00110111 00111000
十进制码: 5 6 7 8 共占用多少个字节。ASCII码文件可在荧屏上按字符呈现,
例如源程序文件即是ASCII文件,用DOS命令TYPE可展现文件的内容。
由于是按字符显示,因而能读懂文件内容。

fgets 从文件中读取贰个字符串 char *
fgets(char * s,int n,FILE *fp);

r:    
 以只读的不二法门打开文件,只同意读,此文件必须存在,否则再次来到NULL,打开成功后归来文件指针,地方指针指向文件底部

二进制文件是按二进制的编码格局来存放文件的。 例如, 数5678的仓库储存方式为:
00010110 00101110头占贰个字节。二进制文件固然也可在显示器上显得,
但其剧情不能读懂。C系统在拍卖那几个文件时,并不区分体系,都作为是字符流,按字节实行拍卖。
输入输出字符流的发端和了结只由程控而不受物理符号(如回车符)的操纵。
因而也把这种文件称作“流式文件”。

从文件中读取字符串并在字符串末尾添加’\0’,然后存入s,最多读入n-二个字符

r+:  
 以可读可写的主意打开文件,允许读写,此文件必须存在,不然重返NULL,打开成功后赶回文件指针,地点指针指向文件底部

三.文书操作:

当读到换行符、到达文件末尾也许读满n-二个字符,函数再次回到该字符串的首地址

rb+:
 以可读可写、二进制格局打开文件,允许读写,此文件必须存在,不然重临NULL,打开成功后回到文件指针,地点指针指向文件尾部

上边介绍流式文件的开辟、关闭、读、写、 定位等各个操作。

读取失败重回空指针NULL

rt+:
 以可读可写、文本格局打开文件,允许读写,此文件必须存在,不然重临NULL,打开成功后回到文件指针,地方指针指向文件尾部

文件指针:在C语言中用二个指南针变量指向2个文书,那些指针称为文件指针。通过文件指针就可对它所指的文书实行各个操作。

因为出错和到Dawen件末尾都回去NULL,由此相应接纳feof()和ferror()来鲜明函

w:  
 以只写的措施打开文件,只允许写,若文件存在,文件中原来内容会被拔除;若文件不存在,则开创文件,打开成功后归来文件指针,地点指针指向文件底部

概念表达文件指针的一般格局为: FILE* 指针变量标识符;

数fget()重临NULL的实际上原因

w+:
 以读写的方式打开文件,允许读写,若文件存在,文件中原始内容会被扫除;若文件不存在,则创建文件,打开成功后回去文件指针,地点指针指向文件尾部

内部FILE应为大写,它实际是由系统定义的三个数据结构, 该组织中包罗文件名、文件状态和文件当前岗位等信息。
在编写源程序时不必关怀FILE结构的细节。例如:FILE *fp;
表示fp是指向FILE结构的指针变量,通过fp
即可找存放有个别文件音信的构造变量,然后按结构变量提供的消息找到该文件,
实施对文件的操作。习惯上也不明地把fp称为指向二个文书的指针。

fgets()从钦赐的流读字符串,读到换行符时将换行符也视作字符串的一有的读到

a:    
以追加、只写的不二法门打开文件,只同意写。若文件存在,则增添的剧情添加在文件末尾,若文件不存在,则创立文件。打开成功后回到文件指针,地方指针指向文件底部(注意很多书上或材料上讲述追加格局打开成功后地点指针指向文件末尾是漏洞百出的)

1.文本的开辟与关闭概念:

字符串中来

a+:  
以追加、可读写的点子打开文件,允许读写。若举行读操作,则从头先导读;若进行写操作,则将内容添加在末尾。若文件不存在,则创设文件。打开成功后回去文件指针,地点指针指向文件底部。

文本在进行读写操作从前要先开辟,使用达成要关张。

fputs 写一个字符串到文件中去 int
fputs(const char * s,FILE *fp);

别的办法接近。

所谓打开文件,实际上是起家文件的各类关于新闻,
并使文件指针指向该公文,以便举办别的操作。

出现写入错误重返EOF,不然重回二个非负数

上面研究一下以二进制方式和文件格局打开文件有何分别。

关闭文件则断开指针与公事之间的关系,也就禁止再对该公文进行操作。

fputs()不会在写入文件的字符串末尾加上换行符

实际上那二种办法打开文件并从未太大的分裂,仅仅唯有几许区分便是在拍卖有些特殊字符的时候。

在C语言中,文件操作都以由库函数来成功的。

 

以文件情势打开文件,若将数据写入文件,假设碰着换行符’\\n'(ASII

2.文件操作函数:

按格式读写文件

值为10,0A),则会转移为回车—换行’\\r\\n'(ASII值为13,10,0D0A)存入到文件中,同样读取的时候,若遇上回车—换行,即再三再四的

(1)文件打开函数fopen

fprintf 往文件中写格式化数据 int
fprintf(FILE * fp,const char * format,…)

ASII值13,10,则自动转换为换行符。

    fopen函数用来打开二个文本,其调用的相似情势为:文件指针名=fopen(“文件名”,”使用文件格局”);在这之中,“文件指针名”必须是被验证为FILE
类型的指针变量,“文件名”是被打开文件的文件名。
“使用文件情势”是指文件的档次和操作须求。“文件名”是字符串常量或字符串数组。例如:

第一个参数为文件指针,第四个参数是格式控制参数,第多个是出口参数列表

而以二进制格局打开文件时,不会开始展览如此的处理。

FILE *fp;
fp=fopen(“file b”,”r”);

fscanf 格式化读取文件中数据 int fscanf(FILE
* fp,const char * format,…)

还有假如以文件格局打开文件时,若读取到ASCII码为26(^Z)的字符,则结束对文件的读取,会暗中认可为文件已了结,而以二进制情势读取时不会生出那样

其意义是在当前目录下开辟文件file b,
只允许实行“读”操作,并使fp指向该公文。

先是个参数为文件指针,第3个参数是格式控制参数,第⑥个是地方参数列表

的情事。由于健康情况下大家手动编辑完结的文本是不也许出现ASCII码为26的字符,所以能够用feof函数去检查和测试文件是还是不是终止。以上所述的两点分别只

又如:

按格式读写文件须要理解输出和地方参数,相比较麻烦(个人认为)

在windows下存在,在unix下并未区分。

FILE *fp
fp=(“c:\\file_a’,”rb”)

按数据块读写文件

留意:1)在以追加情势打开文件时,地点指针指向文件的首部。

其意义是打开C驱动器磁盘的根目录下的公文file_a,这是1个二进制文件,只同意按二进制格局开始展览读操作。多少个反斜线“\\
”中的第一个代表转义字符,首个代表根目录。”\\”对于打开磁盘下的文书,要留心七个双斜线的不错选择,在表示相对路径时,每一级目录都要用”\\”,

fread 以二进制情势读取文件中的数据

在那里分别一下职位指针和文书指针:

例如:fp=fopen(“d:\\study\\file_b”,”r+”);

unsigned int fread(void * buffer,unsigned
int size,unsigned int count,FILE * fp)

文本指针:指向存款和储蓄文件新闻的二个结构体的指针

####动用文件的法门共有12种,上面给出了它们的号子和意义。

从fp所指的文本中读取数据并储存到buffer所指向的内部存款和储蓄器中

地方指针:对文本举行读写操作时移动的指针

文件使用办法       意 义
“rt” 只读打开多少个文书文件,只同意读数据
“wt” 只写打开或树立二个文书文件,只允许写多少
“at” 追加打开1个文书文件,并在文书末尾写多少
“rb” 只读打开二个二进制文件,只允许读数据
“wb” 只写打开或确立1个二进制文件,只允许写多少
“ab” 追加打开二个二进制文件,并在文书末尾写多少
“rt+” 读写打开三个文本文件,允许读和写
“wt+” 读写打开或创建一个文本文件,允许读写
“at+” 读写打开三个文本文件,允许读,或在文书末增加数据
“rb+” 读写打开二个二进制文件,允许读和写
“wb+” 读写打开或确立三个二进制文件,允许读和写
“ab+” 读写打开二个二进制文件,允许读,或在文书末扩展数据

buffer待读入数据块的胚胎地址

在头文件中设有贰个结构体_iobuf,在VC6.0中选中FILE,然后F12,则能够见见_iobuf的切切实实定义:

对于文本使用方法有以下几点表明:

size每一个数据块的大小(待读入每一种数据块的字节数)

😉

a.
文件使用方法由r,w,a,t,b,+四个字符拼成,各字符的意思是:

count最多允许读取数据块的个数

亚洲城88游戏娱乐 1

r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写

函数再次来到的是实际读到的多寡块个数

struct_iobuf {

b.
凡用“r”打开三个文书时,该公文必须已经存在,
且只好从该文件读出。不然报错。

 fwrite 以二进制情势写多少到文件中去

char*_ptr;

c. 用“w”打开的文书只可以向该公文写入。
若打开的文本不存在,则以钦点的文本名制造该公文,若打开的公文已经存在,则将该文件删去,重建1个新文件。

unsigned int fwrite(void * buffer,unsigned
int size,unsigned int count,FILE * fp)

int_cnt;

d.
若要向一个已存在的文书增添新的音讯,只好用“a
”形式打开文件。但那时该文件必须是存在的,不然将会出错。

buffer待输出数据块的发端地址

char*_base;

e.
在开辟七个文件时,要是出错,fopen将回来2个空指针值NULL。

size每种数据块的大大小小(待读入每种数据块的字节数)

int_flag;

在程序中得以用这一音信来辨别是或不是成功打开文件的行事,并作相应的拍卖。由此常用以下程序段打开文件:

count最多允许读取数据块的个数

int_file;

if((fp=fopen("c:\\file_a","rb"))==NULL)
{
printf("\nerror on open c:\\file_a file!");
getch();
exit(1);
}

函数重回的是实际上读到的数额块个数

int_charbuf;

这段程序的意思是,如果回到的指针为空,表示无法开拓C盘根目录下的file_a文件,则交给提示新闻“error
on open c:\
file_afile!”,下一行getch()的意义是从键盘输入2个字符,但不在显示器上显得。在此处,该行的法力是伺机,只有当用户从键盘敲任一键时,程序才继续执行,
由此用户可应用那一个等待时间阅读出错提示。敲键后执行exit(1)退出程序。

那七个函数常于二进制文件的输入和出口

int_bufsiz;

f.
把三个文件文件读入内部存储器时,要将ASCII码转换来二进制码,
而把公文以文件格局写入磁盘时,也要把二进制码转换到ASCII码,由此文本文件的读写要开销较多的转移时间。对二进制文件的读写不存在那种转移。

getw 以二进制情势读取一个整数

char*_tmpfname;

g. 标准输入文件(键盘),标准输出文件(显示屏),标准出错输出(出错音信)是由系统打开的,可一贯接纳。

 putw 以二进制格局存贮三个整数

};

(2)文件关闭函数fClose:

 

typedefstruct_iobuf FILE;

文件一旦选拔实现,应用关闭文件函数把公文关闭,
以制止文件的数据丢失等不当。

 

😉

fclose函数 调用的一般情势是: fclose(文件指针);

文件状态检查函数

亚洲城88游戏娱乐 2

诸如: fclose(fp);
平常完毕关闭文件操作时,fclose函数重回值为0。如重临非零值则代表有荒唐发生。

feof 文件甘休 int feof(FILE * fp);

比如用FILE
*fp定义了3个文本指针,并成功开拓1个文件之后,fp只是指向该结构体,而在对文本进行读写操作时,fp的值并不会转移,改变的是结构体中_ptr的值,这个_ptr正是岗位指针。

 

ferror 文件读/写出错 int ferror(FILE
*fp);

2)以充实格局打开时,若举行写操作,则rewind函数和fseek函数不会起到功效,因为以扩充情势打开时开始展览写操作的话,系统会自行将地点指针移动到最终。

C语言文件操作(2)

文本出现谬误函数再次来到非0值,不然,函数重回0

3)当文件打开用于更新时,能够经过文件指针对文本进行读写操作,不过一旦没有给出fseek恐怕rewind的话,读操作后边不可能一贯跟写操作,否则会是船到江心补漏迟的写操作(地方指针会移动,但是急需写入文件的情节不会被写入到文件在那之中),然则写操作后能够一贯跟读操作。

文本的读写:

clearerr 清除文件漏洞百出标志

1.测试程序


ftell 了然文件指针的近日地方 long tell(FILE
* fp);

一经工程目录下已存在文件test.txt,文件中包罗的字符串为”ABC”

对文件的读和写是最常用的公文操作。

      成功再次来到文件当前读写地点,否则重临-1L

😉

在C语言中提供了多样文书读写的函数:

文本定位函数

亚洲城88游戏娱乐 3

·字符读写函数 :fgetc和fputc

rewind 反绕重置地方指针到文件首部 void
rewind(FILE * fp);

/*测试fopen函数以充实格局打开文件时开端指针的职责 二零一三.10.5*/