barriers / 阅读 / 详情

C语言下提供了哪些有关文件的操作?

2023-06-23 07:27:06
共2条回复
北境漫步

1,两种文件存取方式(输入,输出方式)

顺序存取

直接存取

2,数据的两种存放形式

文本文件

二进制文件

13.2文件指针

定义文件类型指针变量的一般形式:

FILE *指针变量名;

例如:

FILE *fp1,*fp2;

13.3打开文件

在使用文件之前,需打开文件.在C里使用fopen函数打开文件.格式为:

fopen(文件名,文件使用方式);

此函数返回一个指向FILE类型的指针.如:

FILE *fp;

fp=fopen("file_1","r");

如果调用成功,fp就指向file_1,否则返回为NULL,所以为了保证文件的正确使用,要进行测试.采用如下语句:

If((fp=fopen("file_1","r"))==NULL)

{

printf("Cannot open this file ");

exit(0);

}

最常用的文件使用方式及其含义如下:

1,"r".为读而打开文本文件.(不存在则出错)

2,"rb".为读而打开二进制文件.

3,"w".为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)

4,"wb".为写而打开二进制文件.

5,"a".为在文件后面添加数据而打开文本文件.(若不存在,则新建;反之,在原文件后追加)

6,"ab".为在文件后面添加数据而打开一个二进制文件.

最常用的文件使用方式及其含义如下:

7,"r+".为读和写而打开文本文件.(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)

8,"rb+".为读和写而打开二进制文件.只是在随后的读写时,可以由位置函数设置读和写的起始位置.

9,"w+".首先建立一个新文件,进行写操作,随后可以从头开始读.(若文件存在,原内容将全部消失)

10,"wb+".功能与"w+"同.只是在随后的读写时,可以由位置函数设置读和写的起始位置.

最常用的文件使用方式及其含义如下:

11,"a+".功能与"a"相同;只是在文件尾部添加新的数据后,可以从头开始读.

12,"ab+".功能与"a+"相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置.

13.4关闭文件

当文件的读写操作完成之后,使用fclose函数关闭文件.格式如下:

fclose(文件指针)

如:fclose(fp);

13.5调用getc(fgetc)和putc(fputc)函数进行输入和输出

1,调用putc(或fputc)函数输出一个字符

调用形式为:

putc(ch,fp);

功能是:将字符ch写到文件指针fp所指的文件中去.当输出成功,putc函数返回所输出的字符;否则,返回一个EOF值.EOF是在stdio.h库

函数文件中定义的符号常量,其值等于-1.

13.5调用getc(fgetc)和putc(fputc)函数进行输入和输出

例如:把从键盘输入的文本按原样输出到名为file_1.dat文件中,用字符@作为键盘输入结束标志.

#include

Void main()

{

FILE *fpout;

char ch;

if(fpout=fpopen("file_1","w")==NULL)

{

printf("Cannot open this file! ");

exit(0);

}

ch=getchar();

while(ch!="@")

{ fputc(ch,fpout); ch=getchar(); }

fclose(fpout);

}

2.调用getc(或fgetc)函数输入一个字符

调用形式为:

ch=getc(pf);

功能是:从pf指定的文件中读如一个字符,并把它作为函数值返回.

例如:把一个已存在磁盘上的file_1.dat文本文件中的内容,原样输出到终端屏幕上.

#include

void main(){

FILE *fpin;

char ch;

if((fpin=fopen("file_1.dat","r"))==NULL)

{ printf("Cann"t open this file! ");exit(0);}

ch=fgetc(fpin);

while (ch!=EOF)

{ putchar(ch); ch=fgetc(fpin);}

fclose(fpin);

}

13.6判断文件结束函数feof

EOF可以作为文本文件的结束 标志,但不能作为二进制文件的结束符.feof函数既可以判断二进制文件,又可以判断文本文件.

例:编写程序,用于把一个文本文件(源)复制到另一个文件(目的)中,源文件名和目的文件名由命令行输入.命令形式如下:

可执行程序名 源文件名 目的文件名

#include

void filecopy(FILE* ,FILE *);

void main(int argc,char *argv[]){

FILE *fpin,*fpout;

if(argc==3)

{ fpin=fopen(argv[1],"r");

fpout=fopen(argv[2],"w");

filecopy(fpin,fpout);

fclose(fpin);fclose(fpout);

}

else if(argc>3)

printf("The file names too many!! ";

else

printf("There are no file names for input or output!! );

}

void filecopy(FILE *fpin,FILE *fpout)

{

char ch;

ch=getc(fpin);

while(!feof(fpin))

{putc(ch,fpout); ch=getc(fpin);}

}

13.7fscanf函数和fprintf函数

1,fscanf函数

fscanf只能从文本文件中按格式输入,和scanf函数相似,只不过输入的对象是磁盘上文本文件中的数据.调用形式为:

fscanf(文件指针,格式控制字符串,输入项表)

例如:fscanf(fp,"%d%d",&a,&b);

fscanf(stdin,"%d%d",&a,&b);

等价于scanf("%d%d",&a,&b);

3.fprintf函数

fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCII代码形式输出到文本文件中.Fprintf函数和printf函数相似,只是

将输出的内容按格式存放到磁盘的文本文件中.调用形式如下:

fprintf(文件指针,格式控制字符串,输出项表)

如:fprintf(fp,"%d %d",x,y);

以下语句 fprintf(stdout,"%d %d",x,y)

13.8fgets函数和fputs函数

1,fgets函数

fgets函数用来从文件中读入字符串.调用形式如下:

fgets(str,n,fp);

函数功能是:从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符时,则遇到换行符或一个EOF结束本次读操作,

并已str作为函数值返回.

13.8fgets函数和fputs函数

2,fputs函数

fput函数把字符串输出到文件中.函数调用形式如下:

fputs(str,fp);

注意:为了便于读入,在输出字符串时,应当人为的加诸如" "这样的字符串.

13.9fread函数和fwrite函数

fread and fwrite函数用来读,写二进制文件.它们的调用形式如下:

fread(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

buffer:要输入或输出的数据块的首地址

count:每读写一次,输入或输出数据块的个数

size:每个数据块的字节数

fp:文件指针

13.9fread函数和fwrite函数

例如有如下结构体:

struct st{

char num[8];

float mk[5];

}pers[30];

以下循环将把这30个元素中的数据输出到fp所指文件中.

for(i=0;i<30;i++)

fwrite(&pers[i],sizeof(struct st),1,fp);

13.9fread函数和fwrite函数

以下语句从fp所指的文件中再次将每个学生数据逐个读入到pers数组中.

i=0;

fread(&pers[i],sizeof(struct st),1,fp);

while(!feof(fp))

{ i++;

fread(&pers[i],sizeof(struct st),1,fp);

}

13.10文件定位函数

1,fseek函数

fseek函数用来移动文件位置指针到指定的位置上,接着的读或写操作将从此位置开始.函数的调用形式如下:

fseek(pf,offset,origin)

pf:文件指针

offset:以字节为单位的位移量,为长整形.

origin:是起始点,用来指定位移量是以哪个位置为基准的.

1,fseek函数

位移量的表示方法

标识符 数字 代表的起始点

SEEK_SET 0 文件开始

SEEK_END 2 文件末尾

SEEK_CUR 1 文件当前位置

假设pf已指向一个二进制文件,则;

fseek(pf,30L,SEEK_SET)

fseek(pf,-10L*sizeof(int),SEEK_END)

对于文本文件,位移量必须是0;如:

fseek(pf,0L,SEEK_SET)

fseek(pf,0L,SEEK_END)

2. ftell函数

ftell函数用以获得文件当前位置指针的位置,函数给出当前位置指针相对于文件开头的字节数.如;

long t;

t=ftell(pf);

当函数调用出错时,函数返回-1L.

我们可以通过以下方式来测试一个文件的长度:

fseek(fp,0L,SEEK_END);

t=ftell(fp);

3.rewind函数

调用形式为:

rewind(pf);

函数没有返回值.函数的功能是使文件的位置指针回到文件的开头.

max笔记

用管道比较方便。

相关推荐

C语言文件关闭函数fclose(文件指针)是什么?

fclose函数为C语言标准库函数,用来关闭一个已打开的文件。该函数在stdio.h中声明,原型为:intfclose(FILE*fp);当fclose被调用时,一个打开的文件(以文件指针fp标识)会被关闭,关闭后,无法再对fp执行读写操作。如果关闭成功,返回0,否则返回负值。C语言文件操作的标准流程为1、fopen打开文件;2、通过各种读写函数,读写文件;3、所有操作结束后,调用fclose关闭文件。
2023-06-22 23:14:021

C语言中 fclose(fp) 啥意思

输入输出流是用缓冲区的fclose();调用后会刷新缓冲区,因此会输出结果
2023-06-22 23:14:124

fclose关闭文件阻塞

fclose关闭文件阻塞的步骤有4步。1、fclose()函数功能为:关闭一个流,把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。2、点击文件,双击程序中间空格(缓冲区),点击操作缓冲区。3、将程序重新输入缓冲内,等待1~2分钟。4、使用fclose()函数,把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
2023-06-22 23:14:191

C语言中的fclose函数该怎么用?

加个if使程序显得更加健壮,考虑一切可能发生的情况,有可能关闭文件失败.fclose(FILE* fp),传递的参数为FILE类型的指针. 一般没必要判断,但以后你到公司了,如果想写出质量很高的代码,就应该加判断.因为当你以后和一个团体一起做项目的时候,调试程序时,要考虑很多问题,你首先把这个做了,就可以减少维护和调试的工作量.现在你可能不明白,等以后参加工作了,就会理解了.
2023-06-22 23:14:292

matlab fclose函数怎么用

一般打开一个文件fid=fopen("a.txt","w")fclose(fid)%关闭文件号就关闭了文件
2023-06-22 23:14:361

在C语言中,当成功执行了文件关闭操作时,Fclose函数的返值是什么

类似这种问题去问MSDNMSDN原文:fclose returns 0 if the stream is successfully closed. return EOF to indicate an error.
2023-06-22 23:14:463

在程序结束时,应当用fclose函数关闭已打开的文件。对不对吗

fopen的时候,会向操作系统申请文件句柄。单个进程能够打开的最大文件句柄数量是有限制的,打开的文件句柄数越多响应时间肯定会越慢。如果程序结束的时候不用fclose释放文件句柄,文件句柄不能被回收。
2023-06-22 23:14:543

PHP问题:fclose()函数

fclose($handle);前加句var_dump($handle);就清楚了这个和c里的文件I/O一样的,通俗的说$handle是指针,fclose是关闭指针
2023-06-22 23:15:012

C语言中,用fopen打开程序了程序,结束时为什么要用fclose关闭?

fclose有两个作用:1.将输出缓冲区内容写到存储设备上2.释放对应的资源如果不调用fclose,相应地,可能会造成1.对文件的更改没有被记录到磁盘上2.其他进程无法存取该文件中的一种或者多种后果。因此对应fopen地调用fclose是必要的
2023-06-22 23:15:101

fclose(fp);是什么意思

关闭fp指向的文件句柄,防止句柄泄露
2023-06-22 23:15:192

C语言:为什么fclose(fp) 是错的

因为fp是在函数save_one_month中声明的,却在函数外进行fclose(fp);,编译器自然认为fp是没有定义的标识符,这引起了一连串的错误。
2023-06-22 23:15:401

调用fclose函数后。原有的文件指针还可以进行文件操作吗?

FILE *fp; 用fp打开文件再fclose(fp);后,应该认为,这个fp已经对原来打开文件失效,不能继续对已经关闭的文件操作,否则容易造成未知错误。如果要操作文件,需要重新打开并在fclose之前完成操作。
2023-06-22 23:15:471

C语言子函数中fopen文件后必须要fclose吗

一般都把fopen和fclose放到一个函数里,以免忘记fclose,你可以把你子函数的fopen放到你的主函数里面啊
2023-06-22 23:15:573

PHP问题:fclose()函数

fclose($handle); 前加句var_dump($handle);就清楚了这个和c里的文件I/O一样的,通俗的说$handle是指针,fclose是关闭指针
2023-06-22 23:16:041

在c++中,为什么关闭文件不可以使用成员函数fclose()

fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。用法::intfclose(file*stream);程序示例:#include#includeintmain(void){file*fp=null;constchar*buf="0123456789";fp=fopen("dummy.fil","w");/*创建一个包含10个字节的文件*/fwrite(buf,strlen(buf),1,fp);/*将buf内容写入到文件中*/fclose(fp);/*关闭文件*/fp=null;return0;}如果流成功关闭,fclose返回0,否则返回eof(-1)。如果流为null,而且程序可以继续执行,fclose设定errornumber给einval,并返回eof。应用:可在fclose(fp)后使用if(fclose()){perror("fclose");}来判断是否成功关闭文件,关闭失败,则fclose返回“1”并输出出错原因。
2023-06-22 23:16:131

在程序结束时,应当用fclose函数关闭已打开的文件。对不对吗

可能是你没设置好建议你看看php帮助文档,里面有介绍的
2023-06-22 23:16:215

C语言中fclose(fp)啥意思?

因为fp是在函数save_one_month中声明的,却在函数外进行fclose(fp);,编译器自然认为fp是没有定义的标识符,这引起了一连串的错误。
2023-06-22 23:16:351

C++ 如果一个进程里面用到了很多FILE,都没fclose,会怎么样

file 只是文件操作的一个句柄,占不了多少内存。fopen成功了一个文件,没有fclose,只会导致你打开的这个文件其他进程没法访问了。不信你可以写一个程序读方式打开一个文件,然后用鼠标双击,会提示文件已经被打开。
2023-06-22 23:16:532

c语言:从文件f1.txt读入一行字符,将其中所有小写字母改写为大写字母,然后输出到f2.txt中?

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){/*主程序入口*/char st[200][80];int i=0,n,j;FILE * myf1,*myf2;/*变量声明*/myf1=fopen("f1.txt","r");/*打开文件*/myf2=fopen("f2.txt","rw+");/*打开文件*/if(myf1==NULL) return 0;if(myf2==NULL) return 0;while(fgets(st[i],80,myf1)!=NULL){i++;}for(j=0;j<i;j++)for(n=0;st[j][n];n++){if(st[i][n]>="a"&&st[i][n]<="z")st[i][n]-=32;}for(n=0;n<i;n++)fprintf(myf2,"%s ",st[n]);fclose(myf1);/*关闭文件*/fclose(myf2);/*关闭文件*/for(n=0;n<i;n++)printf("%s ",st[n]);}
2023-06-22 23:17:022

VC++中对一个文件操作,在原有的基础上加字符。fopen();fseek();我的程序不知道为什么就不行,求解

FILE *pFile=fopen("D:\3.txt","r+w");
2023-06-22 23:17:103

fopen返回NULL,从数据安全的角度,需要fclose么?为什么

是的,在使用完一个文件后应该关闭它,这应该成为一个习惯。如果不关闭文件,可能会丢失数据。因为在向文件写数据时,实现将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose函数关闭文件,他先将缓冲区中的数据输出到磁盘文件然后才释放文件指针变量,从而避免了数据丢失。关闭文件的格式是:fclose(文件指针);
2023-06-22 23:17:171

Linux下,fclose(fd)后,为什么没有释放内存,直到把该文件从磁盘上删除,使用内存数才减去文件大小?

fclose会将缓冲区数据写入磁盘,但若磁盘已满,则fclose就会失败,导致内存没有释放。判断下fclose返回值是不是EOF(-1),并检查下是不是磁盘满了。
2023-06-22 23:17:251

重复多次fclose一个打开过一次 FILE fp指针会有什么结果 并请解释

当然会出错! fclose要释放与文件相关连的缓存,释放文件号等。你对同一fp多次fclose会引起对同一内存的多次free,故而出错。
2023-06-22 23:17:322

C++。freopen,fclose函数:

代码似乎没问题,你“无法关闭”的错误现象是什么?
2023-06-22 23:17:436

为什么很多库函数名称前有f 如fscanf ,fclose,fprintf, 等等,这是什么意思

表示这些函数都是用于对文件进行操作的函数。
2023-06-22 23:18:013

C#中类似C++fopen、fclose、fwrite的函数

System.IO.FileStream~具体看你操作什么文件。C#分的很细一般的当流操作就OK在复杂xml也有专门的操作类
2023-06-22 23:18:212

关于fopen,fprintf,fclose的一个疑难杂症,百思不得其解,请高手指教!!!

跟操作系统有关。
2023-06-22 23:18:295

用fopen,fclose,fseek,ftell,fwrite,fread,这些函数写一个加密解密的代码

最简单的加密解密就是 fopen打开要加密的文件,fseek+ftell得到文件大小,之后fread读取全部数据,将数据分为2半,前后颠倒,在用fwrite清空原先文件数据 并写入颠倒后的数据 这样就实现了简单的不能再简单的加密了,反之亦然。BOOL FileChange(char * path){long length;long last;FILE * fc=fopen(path,"rb");if(NULL==fc)return 0;fseek(fc,0,SEEK_END);length=ftell(fc);if((length%2)==0){last=length-(length/2);fseek(fc,0,SEEK_SET);char *jo=(char *)malloc(length-last);char *jo1=(char *)malloc(last);fread(jo,length-last,1,fc);fseek(fc,length-last,SEEK_SET);fread(jo1,last,1,fc);fclose(fc);FILE * fw=fopen(path,"wb+");fwrite(jo1,last,1,fw);fwrite(jo,length-last,1,fw);fclose(fw);}else{length--;last=length-(length/2);fseek(fc,0,SEEK_SET);char *jo=(char *)malloc(length-last);char *jo1=(char *)malloc(last);char *jo2=(char *)malloc(1);fread(jo,length-last,1,fc);fseek(fc,length-last,SEEK_SET);fread(jo1,last,1,fc);fread(jo2,1,1,fc);fclose(fc);FILE * fw=fopen(path,"wb+");fwrite(jo1,last,1,fw);fwrite(jo,length-last,1,fw);fwrite(jo2,1,1,fw);free(jo);free(jo1);free(jo2);fclose(fw);}return 0;}使用这个函数就可以让文件数据前后颠倒了 文件便无法运行了,再次执行这函数 数据颠倒过来后,就又可以运行了
2023-06-22 23:18:481

fclose(fp)后还需要把fp置NULL吗?

置NULL是个好习惯。为什么这么说呢,假如原来的fp=20,你已经废弃了20下次又错用了fp, 此时一定会出错吗?那可不一定,出错是命好,还有一种情况是你在其他地方申请了一个20号句柄,这样你竟然释放成功了!一处错误如果不能让它在最开始的时候暴露,就会蔓延到其他地方。你可能需要百倍的精力去找到原先BUG发生的地方。fp置NULL是个好习惯。就像开车系安全带一样。
2023-06-22 23:18:551

设fp是指向某文件的文件指针,若函数fclose(fp)操作不成功,返回值是_________。

b应该是。
2023-06-22 23:19:032

怎样把printf里的字符串直接存文件里去?

用fprintf函数FILE *fp = fopen("out.txt","w");fprintf(fp,"hello world ");int a;fprintf(fp,"%d ",a);fclose(fp)
2023-06-22 23:19:114

C语言问题,关于文件操作的

生成的文件多了一个空行导致!!!
2023-06-22 23:19:183

PHP fopen()和 file

这篇文章主要介绍了PHP fopen()和 file_get_contents()应用与差异,需要的朋友可以参考下代码如下:$file=fopen("11.txt","r")or exit("Unable to open file!");//fopen打开文件,如果不存在就显示打不开。$filesize =filesize("11.txt");//计算文件大小echo fread($file,$filesize);//读取文件fclose($file);//关闭文件fopen()打开文件例子,fclose()用不用在页面上都没有体现,但是如果不用fclose()的话,被打开的文件会一直占用资源。fopen() 打开网址例子:代码如下:$web="$fp=fopen($web,"r");if($fp){while(!feof($fp)){echo fgets($fp);}}feof()检查文件是否到末端 ,到末端返回1,没有到返回0;fgets()是逐行读取。file_get_contents()例子;代码如下:$web ="$fcontent=file_get_contents($web);echo $fcontent;显然file_get_contents()更为简单。而且在实验过程中我发现,如果在 $web =""中 不加www. 会直接跳转,加www.会在本页加载
2023-06-22 23:19:251

matlab中fprintf,多次fopen,fclose,数据会覆盖,怎么让数据接着写下去?

把第二个fopen里的wt换成a即可关于a w r +之类的意义和c语言里是一样的
2023-06-22 23:19:333

C语言文件关闭函数fclose(文件指针)是什么?

第一题1、13,4,42、97 ,01001100, 0x393、因为程序中涉及到数字与字符的处理,字符用ASCII码表示,计算方便。4、(1)执行流程首先输入一个字符串把字符串地址赋值给指针变量p,调用jisuan函数计算输入字符串中字母表中字符个数,0-9出现次数,其余字符出现次数,将得到的结果输出。(2)void jisuan(char *str){函数体中内容复制进来。****}
2023-06-22 23:19:532

matlab fclose函数怎么用

fclose一般与fopen成对使用。在matlab中打开文件要使用fopen函数。最简单的例子:fileID = fopen(filename)然后就会生成一个fileID的值,这个值将标记这个文件,对文件的读写操作都是通过这个值来进行的。当不需要对文件进行操作之后,就可以使用fclose函数对这个文件进行关闭。简单的例子如下:fclose(fileID)说明:fclose的matlab帮助文档解释是:关闭一个打开的fileID的文件,fileID是一个通过fopen函数获取到的整数。
2023-06-22 23:20:021

函数fclose()的功能是什么

 函数名: fclose  功 能: 关闭一个流。注意:使用fclose函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。  用 法: int fclose(FILE *stream);  程序例:  #include <string.h>  #include <stdio.h>  int main(void)  {  FILE *fp;  char buf[11] = "0123456789";  /* create a file containing 10 bytes */  fp = fopen("DUMMY.FIL", "w");  fwrite(&buf, strlen(buf), 1, fp);  /* close the file */  fclose(fp);  return 0;  }  如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。  如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。
2023-06-22 23:20:101

fopen和fclose函数的返回值是多少?

fopen()文件顺利打开后,返回指向该流的文件指针,如果文件打开失败,则返回NULL,并将错误代码存储在errno中。fclose()成功关闭可返回0,错误返回EOF并把错误存储在errno中。
2023-06-22 23:20:182

当顺利执行了文件关闭操作文件时fclose函数的返回值是什么

0
2023-06-22 23:20:392

C语言中,用fopen打开程序了程序,结束时为什么要用fclose关闭?

简单点说就是:如果你家里门开了,又不关贼可能会进来。
2023-06-22 23:20:462

求解:verilog语言中$fopen $fdisplayh $fclose三个函数的用法

1 文件可以用系统任务$fopen打开。用法有两种$fopen("<文件名>");<文件句柄>=$fopen("<文件名>");2$fdisplay是将数据写入制定的文件中。例如H1=$fopen("文件名");%取一个文件的句柄$fdisplay("数据");%将数据写入文件3同上当你想关闭文件的时候就使用fclosefclose(<文件句柄>);%这里的文件句柄就是在$fopen中获得的文件句柄
2023-06-22 23:20:531

C语言子函数中fopen文件后必须要fclose吗

一般都把fopen和fclose放到一个函数里,以免忘记fclose,你可以把你子函数的fopen放到你的主函数里面啊
2023-06-22 23:21:046

C语言文件函数中exit(0)与fclose(fp)有什么区别??

exit(0)是退出当前程序。fclose(fp)是关闭文件指针fp所打开的文件。
2023-06-22 23:21:321

fclose 失败,错误代码 Bad file number 是什么意思

函数名编辑fclose()2功 能编辑关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。3用 法编辑:int fclose(FILE *stream);4程序示例编辑#include<string.h>#include<stdio.h>intmain(void){FILE*fp=NULL;constchar*buf="0123456789";fp=fopen("DUMMY.FIL","w");/*创建一个包含10个字节的文件*/fwrite(buf,strlen(buf),1,fp);/*将buf内容写入到文件中*/fclose(fp);/*关闭文件*/fp=NULL;return0;}如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。
2023-06-22 23:21:391

fclose的时候会立即把文件写入硬盘么

是的。C语言fclose是就执行了修改
2023-06-22 23:21:461

fclose关闭的到底是C标准库的源,还是系统的fd

fclose函数为C语言标准库函数,用来关闭一个已打开的文件。 该函数在stdio.h中声明,原型为: int fclose(FILE *fp); 当fclose被调用时,一个打开的文件(以文件指针fp标识)会被关闭,关闭后,无法再对fp执行读写操作。 如果关闭成功,返回0,否则返回负值。 C语言文件操作的标准流程为 1 fopen打开文件; 2 通过各种读写函数,读写文件; 3 所有操作结束后,调用fclose关闭文件。
2023-06-22 23:21:541

C语言中使用fopen在fclose关闭文件后,如何再次打开文件?

fclose之后再fopen就行了。
2023-06-22 23:22:011

一道C语言文件题(急)

#include <stdio.h> void main() { FILE *fp; int i,j,k,x,y; scanf("%d%d",&i,&j); //输入两个数字给ijfp=fopen("t.dat","w");//以写的格式打开文件名为“t.dat”的文件 fprintf(fp,"%d ",i); //将输入的数字i写入到文件“t.dat”中if (i<j) k=j; //如果i小于j那么k=jelse if(i>j) k=i; //如果i大于j那么k=ielse k=i+j; //i==j时,k=i+jfprintf(fp,"%d ",k); //把k的值写入到文件“t.dat”中fclose(fp); //关闭文件“t.dat”fp=fopen("t.dat","r"); //以读的方式打开文件“t.dat”fscanf(fp,"%d%d",&x,&y); //读取两个数字分别赋值给x,yprintf("x=%d,y=%d ",x,y); //将x,y标准输出到屏幕上fclose(fp); //关闭文件} 由此可以看出该程序的功能是,首先输入两个数据,把第一个数据存入文件中,如果第一个数据大于第二个数据,那么把第二个文件存入文件中,如果第一个数据小于第二个数据,则再把第一个数据存入文件中,如果他们相等,那么存入的是这个两个数据的和最后在屏幕上输出存入文件的数据
2023-06-22 23:22:081

19. fopen、fclose、feof、fputc、fgetc、fread、fwrite、ftell、fseek函数的用法。

clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h>定义函数 void clearerr(FILE * stream);函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf表头文件 #include<stdio.h>定义函数 int fclose(FILE * stream);函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。返回值 若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。错误代码 EBADF表示参数stream非已打开的文件。范例 请参考fopen()。fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose表头文件 #include<stdio.h>定义函数 FILE * fdopen(int fildes,const char * mode);函数说明 fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。返回值 转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。范例 #include<stdio.h>main(){ FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s ”,”hello!”); fclose(fp);}执行 hello!feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread表头文件 #include<stdio.h>定义函数 int feof(FILE * stream);函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。返回值 返回非零值代表已到达文件尾。fflush(更新缓冲区) 相关函数 write,fopen,fclose,setbuf表头文件 #include<stdio.h>定义函数 int fflush(FILE* stream);函数说明 fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数stream为NULL,fflush()会将所有打开的文件数据更新。返回值 成功返回0,失败返回EOF,错误代码存于errno中。错误代码 EBADF 参数stream 指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。fgetc(由文件中读取一个字符) 相关函数 open,fread,fscanf,getc表头文件 include<stdio.h>定义函数 nt fgetc(FILE * stream);函数说明 fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。范例 #include<stdio.h>main(){ FILE *fp; int c; fp=fopen(“exist”,”r”); while((c=fgetc(fp))!=EOF) printf(“%c”,c); fclose(fp);}fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc表头文件 include<stdio.h>定义函数 har * fgets(char * s,int size,FILE * stream);函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。范例 #include<stdio.h>main(){ char s[80]; fputs(fgets(s,80,stdin),stdout);}执行 this is a test /*输入*/this is a test /*输出*/fileno(返回文件流所使用的文件描述词)相关函数 open,fopen表头文件 #include<stdio.h>定义函数 int fileno(FILE * stream);函数说明 fileno()用来取得参数stream指定的文件流所使用的文件描述词。返回值 返回文件描述词。范例 #include<stdio.h>main(){ FILE * fp; int fd; fp=fopen(“/etc/passwd”,”r”); fd=fileno(fp); printf(“fd=%d ”,fd); fclose(fp);}执行 fd=3fopen(打开文件) 相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。范例 #include<stdio.h>main(){ FILE * fp; fp=fopen(“noexist”,”a+”); if(fp= =NULL) return; fclose(fp);}fputc(将一指定字符写入文件流中) 相关函数 fopen,fwrite,fscanf,putc表头文件 #include<stdio.h>定义函数 int fputc(int c,FILE * stream);函数说明 fputc 会将参数c 转为unsigned char 后写入参数stream 指定的文件中。返回值 fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。范例 #include<stdio.h>main(){ FILE * fp; char a[26]=”abcdefghijklmnopqrstuvwxyz”; int i; fp= fopen(“noexist”,”w”); for(i=0;i<26;i++) fputc(a[i],fp); fclose(fp);}fputs(将一指定的字符串写入文件内) 相关函数 fopen,fwrite,fscanf,fputc,putc表头文件 #include<stdio.h>定义函数 int fputs(const char * s,FILE * stream);函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。范例 请参考fgets()。 fread(从文件流读取数据) 相关函数 fopen,fwrite,fseek,fscanf表头文件 #include<stdio.h>定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数 nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。返回值 返回实际读取到的nmemb数目。附加说明 范例 #include<stdio.h>#define nmemb 3struct test{ char name[20]; int size;}s[nmemb];main(){ FILE * stream; int i; stream = fopen(“/tmp/fwrite”,”r”); fread(s,sizeof(struct test),nmemb,stream); fclose(stream); for(i=0;i<nmemb;i++) printf(“name[%d]=%-20s:size[%d]=%d ”,i,s[i].name,i,s[i].size);}执行 name[0]=Linux! size[0]=6name[1]=FreeBSD! size[1]=8name[2]=Windows2000 size[2]=11freopen(打开文件) 相关函数 fopen,fclose表头文件 #include<stdio.h>定义函数 FILE * freopen(const char * path,const char * mode,FILE * stream);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode请参考fopen()说明。参数stream为已打开的文件指针。Freopen()会将原stream所打开的文件流关闭,然后打开参数path的文件。返回值 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。范例 #include<stdio.h>main(){ FILE * fp; fp=fopen(“/etc/passwd”,”r”); fp=freopen(“/etc/group”,”r”,fp); fclose(fp);}fseek(移动文件流的读写位置) 相关函数 rewind,ftell,fgetpos,fsetpos,lseek表头文件 #include<stdio.h>定义函数 int fseek(FILE * stream,long offset,int whence);函数说明 fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。参数 whence为下列其中一种:SEEK_SET从距文件开头offset位移量为新的读写位置。SEEK_CUR 以目前的读写位置往后增加offset个位移量。SEEK_END将读写位置指向文件尾后再增加offset个位移量。当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。下列是较特别的使用方式:1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。附加说明 fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。范例 #include<stdio.h>main(){ FILE * stream; long offset; fpos_t pos; stream=fopen(“/etc/passwd”,”r”); fseek(stream,5,SEEK_SET); printf(“offset=%d ”,ftell(stream)); rewind(stream); fgetpos(stream,&pos); printf(“offset=%d ”,pos); pos=10; fsetpos(stream,&pos); printf(“offset = %d ”,ftell(stream)); fclose(stream);}执行 offset = 5offset =0offset=10ftell(取得文件流的读取位置) 相关函数 fseek,rewind,fgetpos,fsetpos表头文件 #include<stdio.h>定义函数 long ftell(FILE * stream);函数说明 ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。返回值 当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。错误代码 EBADF 参数stream无效或可移动读写位置的文件流。范例 参考fseek()。fwrite(将数据写至文件流) 相关函数 fopen,fread,fseek,fscanf表头文件 #include<stdio.h>定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。返回值 返回实际写入的nmemb数目。范例 #include<stdio.h>#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}#define nmemb 3struct test{ char name[20]; int size;}s[nmemb];main(){ FILE * stream; set_s(0,”Linux!”); set_s(1,”FreeBSD!”); set_s(2,”Windows2000.”); stream=fopen(“/tmp/fwrite”,”w”); fwrite(s,sizeof(struct test),nmemb,stream); fclose(stream);}执行 参考fread()。
2023-06-22 23:22:161

freopen 需要fclose吗 能给我些依据吗

当然需要,所有的open都会返回一个句柄(HANDLE),这个句柄是个系统资源,如果你反复打开不关闭,会造成系统崩溃。不过程序运行结束的时侯会自动关闭所有打开的资源。
2023-06-22 23:22:301