zoukankan      html  css  js  c++  java
  • C语言对文件的操作函数用法详解2

    fopen(打开文件) 
    相关函数 openfclose 
    表头文件 #include<stdio.h> 
    定义函数 FILE * fopen(const char * path,const char * mode); 
    函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
    mode有下列几种形态字符串:
    打开只读文件,该文件必须存在。
    r+ 打开可读写的文件,该文件必须存在。
    打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
    w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
    以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
    a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
    上述的形态字符串都可以再加一个b字符,如rbw+bab+等组合,加入字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在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(将一指定字符写入文件流中) 
    相关函数 fopenfwritefscanfputc 
    表头文件 #include<stdio.h> 
    定义函数 int fputc(int c,FILE * stream); 
    函数说明 fputc 会将参数转为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,fp);
    fclose(fp);
    }

    fputs(将一指定的字符串写入文件内) 
    相关函数 fopenfwritefscanffputcputc 
    表头文件 #include<stdio.h> 
    定义函数 int fputs(const char * s,FILE * stream); 
    函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。 
    返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。 
    范例 请参考fgets()。 
    fread(从文件流读取数据) 
    相关函数 fopenfwritefseekfscanf 
    表头文件 #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 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 ,i,s.name,i,s.size);
    }

    执行
    name[0]=Linux! size[0]=6
    name[1]=FreeBSD! size[1]=8
    name[2]=Windows2000 size[2]=11

     
    freopen(打开文件) 
    相关函数 fopenfclose 
    表头文件 #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(移动文件流的读写位置) 
    相关函数 rewindftellfgetposfsetposlseek 
    表头文件 #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,若有错误则返回-1errno会存放错误代码。 
    附加说明 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 = 5
    offset =0
    offset=10

      
    ftell(取得文件流的读取位置) 
    相关函数 fseekrewindfgetposfsetpos 
    表头文件 #include<stdio.h> 
    定义函数 long ftell(FILE * stream); 
    函数说明 ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。 
    返回值 当调用成功时则返回目前的读写位置,若有错误则返回-1errno会存放错误代码。 
    错误代码 EBADF 参数stream无效或可移动读写位置的文件流。
    范例 参考fseek()
      
    fwrite(将数据写至文件流) 
    相关函数 fopenfreadfseekfscanf 
    表头文件 #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 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()。
      
    getc(由文件中读取一个字符) 
    相关函数 readfopenfreadfgetc 
    表头文件 #include<stdio.h> 
    定义函数 int getc(FILE * stream); 
    函数说明 getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。虽然getc()fgetc()作用相同,但getc()为宏定义,非真正的函数调用。 
    返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。 
    范例 参考fgetc()
      
    getchar(由标准输入设备内读进一字符) 
    相关函数 fopenfreadfscanfgetc 
    表头文件 #include<stdio.h> 
    定义函数 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 /*输出*/

    gets(由标准输入设备内读进一字符串) 
    相关函数 fopenfreadfscanffgets 
    表头文件 #include<stdio.h> 
    定义函数 char * gets(char *s); 
    函数说明 gets()用来从标准设备读入字符并存到参数s所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上NULL作为字符串结束。 
    返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。 
    附加说明 由于gets()无法知道字符串s的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的安全性问题。建议使用fgets()取代。 
    范例 参考fgets()
      
    mktemp(产生唯一的临时文件名) 
    相关函数 tmpfile 
    表头文件 #include<stdlib.h> 
    定义函数 char * mktemp(char * template); 
    函数说明 mktemp()用来产生唯一的临时文件名。参数template所指的文件名称字符串中最后六个字符必须是XXXXXX。产生后的文件名会借字符串指针返回。 
    返回值 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
    附加说明 参数template所指的文件名称字符串必须声明为数组,如:
    char template[ ]=template-XXXXXX
    不可用char * template=template-XXXXXX
    范例 
    #include<stdlib.h>
    main()
    {
    char template[ ]=template-XXXXXX;
    mktemp(template);
    printf(template=%s ,template);
    }

     
    putc(将一指定字符写入文件中) 
    相关函数 fopenfwritefscanffputc 
    表头文件 #include<stdio.h> 
    定义函数 int putc(int c,FILE * stream); 
    函数说明 putc()会将参数c转为unsigned char后写入参数stream指定的文件中。虽然putc()fputc()作用相同,但putc()为宏定义,非真正的函数调用。 
    返回值 putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。 
    范例 参考fputc()。
      
    putchar(将指定的字符写到标准输出设备) 
    相关函数 fopenfwritefscanffputc 
    表头文件 #include<stdio.h> 
    定义函数 int putchar (int c); 
    函数说明 putchar()用来将参数c字符写到标准输出设备。 
    返回值 putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。 
    附加说明 putchar()非真正函数,而是putc(cstdout)宏定义。 
    范例 参考getchar()
     
    rewind(重设文件流的读写位置为文件开头) 
    相关函数 fseekftellfgetposfsetpos 
    表头文件 #include<stdio.h> 
    定义函数 void rewind(FILE * stream); 
    函数说明 rewind()用来把文件流的读写位置移至文件开头。参数stream为已打开的文件指针。此函数相当于调用fseek(stream,0,SEEK_SET)
    返回值 
    范例 参考fseek()

    setbuf(设置文件流的缓冲区) 
    相关函数 setbuffersetlinebufsetvbuf 
    表头文件 #include<stdio.h> 
    定义函数 void setbuf(FILE * stream,char * buf); 
    函数说明 在打开文件流后,读取内容之前,调用setbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址。如果参数bufNULL指针,则为无缓冲IOSetbuf()相当于调用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ) 
    返回值 
      
    setbuffer(设置文件流的缓冲区) 
    相关函数 setlinebufsetbufsetvbuf 
    表头文件 #include<stdio.h> 
    定义函数 void setbuffer(FILE * stream,char * buf,size_t size); 
    函数说明 在打开文件流后,读取内容之前,调用setbuffer()可用来设置文件流的缓冲区。

    参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小。 
    返回值

    setlinebuf(设置文件流为线性缓冲区) 
    相关函数 setbuffersetbufsetvbuf 
    表头文件 #include<stdio.h> 
    定义函数 void setlinebuf(FILE * stream); 
    函数说明 setlinebuf()用来设置文件流以换行为依据的无缓冲IO。相当于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);请参考setvbuf()。 
    返回值

    setvbuf(设置文件流的缓冲区) 
    相关函数 setbuffersetlinebufsetbuf 
    表头文件 #include<stdio.h> 
    定义函数 int setvbuf(FILE * stream,char * buf,int mode,size_t size); 
    函数说明 在打开文件流后,读取内容之前,调用setvbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小,参数mode有下列几种
    _IONBF 无缓冲IO
    _IOLBF 以换行为依据的无缓冲IO
    _IOFBF 完全无缓冲IO。如果参数bufNULL指针,则为无缓冲IO。 
    返回值

    ungetc(将指定字符写回文件流中) 
    相关函数 fputcgetchargetc 
    表头文件 #include<stdio.h> 
    定义函数 int ungetc(int c,FILE * stream); 
    函数说明 ungetc()将参数c字符写回参数stream所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。 
    返回值 成功则返回字符,若有错误则返回EOF

     

    【转载自】

    C语言对文件的操作函数用法详解2-zdj2007-ChinaUnix博客 http://blog.chinaunix.net/uid-11600035-id-2866021.html

  • 相关阅读:
    Codeforces 1045C Hyperspace Highways (看题解) 圆方树
    Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
    Codeforces 803G Periodic RMQ Problem 线段树
    Codeforces 420D Cup Trick 平衡树
    Codeforces 295E Yaroslav and Points 线段树
    Codeforces 196E Opening Portals MST (看题解)
    Codeforces 653F Paper task SA
    Codeforces 542A Place Your Ad Here
    python基础 异常与返回
    mongodb 删除
  • 原文地址:https://www.cnblogs.com/wxl845235800/p/7234420.html
Copyright © 2011-2022 走看看