1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言文件操作 fopen fclose mkdir(打开关闭文件 建文件夹 判断文件是否存在可读或可写)

C语言文件操作 fopen fclose mkdir(打开关闭文件 建文件夹 判断文件是否存在可读或可写)

时间:2022-08-22 17:37:35

相关推荐

C语言文件操作 fopen  fclose  mkdir(打开关闭文件 建文件夹 判断文件是否存在可读或可写)

1.建文件夹

int _mkdir(const char *path,mode_t mode);

函数名: _mkdir

功 能: 建立一个目录

用 法: int _mkdir( const char *dirname );

头文件库:direct.h

返回值:创建一个目录,若成功则返回0,否则返回-1

=====================================================

2.打开文件fopen()

函数功能: 打开一个文件

函数原型:FILE * fopen(const char * path,const char * mode);

所需库: <stdio.h>

返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。

一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。

if((fin = fopen("a.txt","r")) == NULL)

printf("Open file error.\n");

参数说明:

参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

mode有下列几种形态字符串: (常用的就前几个,后面用到了再查,不用记)

r 以只读方式打开文件,该文件必须存在。

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

rb 为输入打开一个二进制文件。

wb 只写打开或新建一个二进制文件;只允许写数据。

ab 向二进制文件尾添加数据

r+ 以可读写方式打开文件,该文件必须存在。

w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

rb+ 读写打开一个二进制文件,只允许读数据。

wb+ 读写打开或建立一个二进制文件,允许读和写。

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

rt+ 读写打开一个文本文件,允许读和写。

wt+ 读写打开或着建立一个文本文件;允许读写。

at+ 读写打开一个文本文件,允许读或在文本末追加数据。

上述的形态字符串都可以再加一个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"等,读者注意所用系统的规定。

==========================================================

3.关闭文件 fclose()

在使用完一个文件后应该关闭它,以防止它再误用,关闭就是指文件指针变量不指向该文件,也就是文件指针变量与文件脱钩,此后不能再通过该指针对原来与其相联系的文件进行读写操作。除非再次打开,使该指针变量重新指向该文件。

用 fclose 函数关闭文件,fclose 函数调用的一般形式为

fclose(文件指针);

例如:

fclose(fp);

应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将丢失数据。因为如前所述,在向文件写数据时,是先将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区,而程序结束运行,就会将缓冲区中的数据丢失,用 fclose 函数关闭文件,可以避免这个问题,它先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。

fclose 函数也带回一个值,当顺利地执行了关闭操作,则返回值为 0 ,否则返回 EOF (-1) 。可以用 ferror 函数来测试。

==============================================================

下面用一个程序来说明上面几个函数用法:

将a.txt拷贝到/test目录下,名字也为a.txt

[cpp]view plaincopy/** *Author:Gneveek *Data:-10-6 *Descripition:ClockChen'sHomework:Fileoperation#1 *一、将a.txt拷贝到/test目录下,名字也为a.txt */ #include<stdio.h> #include<direct.h>//用_mkdir()创建一个文件夹(目录) intmain() { _mkdir("test"); charc; FILE*fin,*fout; if((fin=fopen("a.txt","r"))==NULL) printf("I'msosorry,Openfileerror.\n"); if((fout=fopen("test\\a.txt","w"))==NULL)//以w方式,只能用于往文件中写,如果不存在,则以指定的文件名新建一个文件 printf("I'msosorry,Openfileerror.\n"); while((c=fgetc(fin))!=EOF) fputc(c,fout); fclose(fin); fclose(fout); return0; }

================================================================

4.判断文件是否存在和是否可读可写

int access(const char *pathname,int mode);

pathname:是文件名称

mode是我们要判断的属性.可以取以下值或者是他们的组合:

R_OK文件可以读

W_OK文件可以写

X_OK文件可以执行

F_OK文件存在.

当我们测试成功时,函数返回0,否则如果有一个条件不符时,返回-1.

用一个程序实例来认识这个函数:

输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读,不存在提示不存在,不可读提示不可读,如果存在并可读,则在当前目录下,创建一个目录test,并将该文件拷贝到test中

[cpp]view plaincopy/** *Author:Gneveek *Data:-10-6 *Descripition:ClockChen'sHomework:Fileoperation#2 *二、输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读, *不存在提示不存在,不可读提示不可读,如果存在并可读, *则在当前目录下,创建一个目录test,并将该文件拷贝到test中 */ #include<stdio.h> #include<io.h> #include<direct.h> #include<string.h> intmain() { FILE*fin,*fout; charfilename[256]; charpathname[256]="test\\"; scanf("%s",filename); if(access(filename,F_OK)==-1)//判断存在与否 printf("Thisfiledoesnotexist!\n"); elseif(access(filename,R_OK)==-1)//如果存在,判断可读否 printf("Cann'tRead!\n"); else//到这里,说明即存在又可读 { charc; _mkdir("test"); strcat(pathname,filename); fin=fopen(filename,"r"); fout=fopen(pathname,"w"); while((c=fgetc(fin))!=EOF) fputc(c,fout); } return0; }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。