fopen(打开文件)
相关函数fclose
表头文件 #include<stdio.h>
定义函数: FILE * fp = NULL
fp = fopen( "a.txt"[ 文件名 ], "w"[ 操作方式 ]);
返回值: 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL。
PS:开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,在fopen()后作判断及处理。
mode有下列几种形态字符串:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
w 打开只写文件,覆盖原内容。若文件不存在则建立该文件。
w+ 打开可读写文件,覆盖原内容。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
- #include<stdio.h>
- main()
- {
- FILE * fp;
- fp=fopen(“noexist”,”a+”);
- if(fp= =NULL) return;
- fclose(fp);
- }
复制代码
fclose(关闭文件)
定义函数 int fclose(FILE * stream);
说明: fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。
范例 参考fopen()。
1. fprintf
功能:传送格式化输出到一个文件中
表头文件:#include<stdio.h>
函数原型:int fprintf(FILE *stream, char *format[, argument,...]);
FILE* 一个FILE型的指针
char* 格式化输入函数,和printf里的格式一样
返回值:成功时返回转换的字节数,失败时返回一个负数
int n= fprintf( fp, "%d%d", i , j);
fp = fopen("/local/test.c","a+");
fprintf(fp,"%s\n",str);
2. fscanf
功能:从一个流中执行格式化输入
表头文件:#include<stdio.h>
函数原型:int fscanf(FILE *stream, char *format[,argument...]);
FILE* 一个FILE型的指针
char* 格式化输出函数,和scanf里的格式一样
返回值:成功时返回转换的字节数,失败时返回一个负数
fp = fopen("/local/test.c","a+");
fscanf(fp,"%s",str);
3.fgetc(由文件中读取一个字符)
定义函数 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)
- <span style="line-height: 2.2em;"> </span><span style="line-height: 2.2em;"> </span><span style="line-height: 2.2em;">printf(“%c”,c);</span>
复制代码
4.fputc(将一指定字符写入文件流中)
定义函数 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++)
- <span style="line-height: 2.2em;"> </span><span style="line-height: 2.2em;"> </span><span style="line-height: 2.2em;"> </span><span style="line-height: 2.2em;">fputc(a,fp);</span>
复制代码
5.fgets(由文件中读取一字符串)
定义函数 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 /*输出*/
6. fputs(将一指定的字符串写入文件内)
定义函数 int fputs(const char * s,FILE * stream);
说明: fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。
返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。
范例 参考fgets()。
7. fread(从文件流读取数据)
定义函数 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 3
- struct test
- {
- char name[20];
- int size;
- }s[nmemb];
- int 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/n”,i,s.name,i,s.size);
- }
复制代码 执行
name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=Windows2000 size[2]=11
8.fwrite(将数据写至文件流)
定义函数 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 3
- struct 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()。
9. getc(由文件中读取一个字符)
定义函数 int getc(FILE * stream);
说明: getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。虽然getc()与fgetc()作用相同,但getc()为宏定义,非真正的函数调用。
返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。
范例 参考fgetc()。
10. putc(将一指定字符写入文件中)
相关函数 fopen,fwrite,fscanf,fputc
表头文件 #include<stdio.h>
定义函数 int putc(int c,FILE * stream);
函数说明 putc()会将参数c转为unsigned char后写入参数stream指定的文件中。虽然putc()与fputc()作用相同,但putc()为宏定义,非真正的函数调用。
返回值 putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。
范例 参考fputc()。
11. getchar(由标准输入设备内读进一字符)
定义函数 int getchar(void);
说明: getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned char转换成int后返回。
返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生。
附加说明 getchar()非真正函数,而是getc(stdin)宏定义。
范例代码如下:
- #include<stdio.h>
- main()
- {
- FILE * fp;
- int c,i;
- for(i=0li<5;i++)
- {
- c=getchar();
- putchar(c);
- }
- }
- 执行 1234 /*输入*/
- 1234 /*输出*/
复制代码
12. putchar(将指定的字符写到标准输出设备)
定义函数 int putchar (int c);
说明: putchar()用来将参数c字符写到标准输出设备。
返回值 putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。
附加说明 putchar()非真正函数,而是putc(c,stdout)宏定义。
范例 参考getchar()。
13. gets(由标准输入设备内读进一字符串)
相关函数 fopen,fread,fscanf,fgets
表头文件 #include<stdio.h>
定义函数 char * gets(char *s);
函数说明 gets()用来从标准设备读入字符并存到参数s所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上NULL作为字符串结束。
返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。
附加说明 由于gets()无法知道字符串s的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题。建议使用fgets()取代。
范例 参考fgets()
|
|