精华内容
下载资源
问答
  • C语言文件操作函数大全

    万次阅读 多人点赞 2018-01-19 20:35:35
    C语言文件操作函数大全 2018-1-19  13.1C语言文件 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制文件 13.2文件指针 定义文件类型指针变量的一般...

    C语言文件操作函数大全

    2018-1-19 

    13.1C语言文件
    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\n");
    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!\n");
    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!\n");

     exit(0);

    }
    ch=fgetc(fpin);//函数名: fgetc 功  能: 从流中读取字符
    while (ch!=EOF)

     putchar(ch); //函数名: putchar 功能: 在stdout上输出字符

     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!!\n";
    else
    printf("There are no file names for input or output!!\n );
    }
    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);
    注意:为了便于读入,在输出字符串时,应当人为的加诸如"\n"这样的字符串.

    #include <stdio.h>
    #include <iostream>

    int main(int argc, char *argv[])
    {
    char arr[10] ;
    char *ap = "hello!" ;//表示ap指向 hello! 这个字符串的首地址
    FILE *fp ;
    if ((fp = fopen("hello.txt", "wt+")) == NULL)
    {
        printf("error!") ;
        exit(1) ;
    }

    fputs(ap, fp) ;//函数名:fputs送一个字符到一个流中,用法: int fputs(char *string, FILE *stream);
    rewind(fp) ; //函数名: rewind将文件指针重新指向一个流的开头,用法: int rewind(FILE *stream); 
    fgets(arr, 10, fp) ;//从文件结构体指针fp中读取数据,每次读取一行。读取的数据保存在arr指向的字符数组中,
                                    每次最多读取n-1个字符(第n个字符赋'\0')
    printf("%s\n", arr) ;
    fclose(fp) ;
    return 0 ;
    }


    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);

    /*size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
    返回值:返回实际写入的数据块数目
    (1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
    (2)size:要写入内容的单字节数;
    (3)count:要进行写入size字节的数据项的个数;
    (4)stream:目标文件指针;
    (5)返回实际写入的数据项个数count。*/


    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);
    函数没有返回值.函数的功能是使文件的位置指针回到文件的开头.


    13.10文件应用
    在磁盘上的test.txt文件中放有10个不小于2的正整数,用函数调用方式编写程序.要求实现:
    1,在被调函数prime中,判断和统计10个整数中的素数以及个数.
    2,在主函数中将全部素数追加到磁盘文件test.txt的尾部,同时输出到屏幕上.
    #include
    #include
    Int prime(int a[],int n)
    {
    int i,j,k=0,flag=0;
    for(i=0;i { for(j=2;j if(a[i]%j==0)
    { flag=0; break;}
    else flag=1;
    if(flag)
    {a[k]=a[i];k++;}
    }
    return k;
    }
    void main(){
    int n,I,a[10];
    FILE *fp;
    fp=fopen("test1-2.txt","r+");
    for(n=0;n<10;n++)
    fscanf(fp,"%d",&a[n]);
    n=prime(a,n);
    fseek(fp,o,2);
    for(i=0;i {printf("%3d",a[i]);
    fprintf(fp,"%3d",a[i]);
    }
    fclose(fp);
    }

     

    clearerr(清除文件流的错误旗标)
    相关函数 feof
    表头文件 #include<stdio.h>
    定义函数 void clearerr(FILE * stream);
    函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。
    它没有返回值,也未定义任何错误。

    fclose(关闭文件)
    相关函数 closefflushfopensetbuf
    表头文件 #include<stdio.h>
    定义函数 int fclose(FILE * stream);
    函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。
    返回值 若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno
    错误代码 EBADF表示参数stream非已打开的文件。

    fdopen(将文件描述词转为文件指针)
    相关函数 fopenopenfclose
    表头文件 #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\n”,”hello!”);
    fclose(fp);
    }

    执行 hello!

    feof(检查文件流是否读到了文件尾)
    相关函数 fopenfgetcfgetsfread
    表头文件 #include<stdio.h>
    定义函数 int feof(FILE * stream);
    函数说明 feof()用来侦测是否读取到了文件尾,尾数streamfopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0
    返回值 返回非零值代表已到达文件尾。

    fflush(更新缓冲区)
    相关函数 writefopenfclosesetbuf
    表头文件 #include<stdio.h>
    定义函数 int fflush(FILE* stream);
    函数说明 fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数streamNULLfflush()会将所有打开的文件数据更新。
    返回值 成功返回0,失败返回EOF,错误代码存于errno中。
    错误代码 EBADF 参数stream指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。

    fgetc(由文件中读取一个字符)
    相关函数 openfreadfscanfgetc
    表头文件 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(由文件中读取一字符串)
    相关函数 openfreadfscanfgetc
    表头文件 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(返回文件流所使用的文件描述词)
    相关函数 openfopen
    表头文件 #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\n”,fd);
    fclose(fp);
    }

    执行 fd=3


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


    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_CURSEEK_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\n”,ftell(stream));
    rewind(stream);
    fgetpos(stream,&pos);
    printf(“offset=%d\n”,pos);
    pos=10;
    fsetpos(stream,&pos);
    printf(“offset = %d\n”,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\n”,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所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。
    返回值 成功则返回c字符,若有错误则返回EOF


    C语言文件操作函数

    2007-10-17 19:21

    13.1C语言文件
    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\n");
    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!\n");
    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!\n");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!!\n";
    else
    printf("There are no file names for input or output!!\n );
    }
    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);
    注意:为了便于读入,在输出字符串时,应当人为的加诸如"\n"这样的字符串.

    #include <stdio.h>
    #include <iostream>

    int main(int argc, char *argv[])
    {
    char arr[10] ;
    char *ap = "hello!" ;
    FILE *fp ;
    if ((fp = fopen("hello.txt", "wt+")) == NULL)
    {
        printf("error!") ;
        exit(1) ;
    }
          fputs(ap, fp) ;

    rewind(fp) ; //

    fgets(arr, 10, fp) ;
    printf("%s\n", arr) ;
    fclose(fp) ;
    return 0 ;
    }

     


    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);
    函数没有返回值.函数的功能是使文件的位置指针回到文件的开头.


    13.10文件应用
    在磁盘上的test.txt文件中放有10个不小于2的正整数,用函数调用方式编写程序.要求实现:
    1,在被调函数prime中,判断和统计10个整数中的素数以及个数.
    2,在主函数中将全部素数追加到磁盘文件test.txt的尾部,同时输出到屏幕上.
    #include
    #include
    Int prime(int a[],int n)
    {
    int I,j,k=0,flag=0;
    for(i=0;i { for(j=2;j if(a[i]%j==0)
    { flag=0; break;}
    else flag=1;
    if(flag)
    {a[k]=a[i];k++;}
    }
    return k;
    }
    void main(){
    int n,I,a[10];
    FILE *fp;
    fp=fopen("test1-2.txt","r+");
    for(n=0;n<10;n++)
    fscanf(fp,"%d",&a[n]);
    n=prime(a,n);
    fseek(fp,o,2);
    for(i=0;i {printf("%3d",a[i]);
    fprintf(fp,"%3d",a[i]);
    }
    fclose(fp);
    }

     

     

    文件操作函数全

    clearerr(清除文件流的错误旗标)
    相关函数 feof
    表头文件 #include<stdio.h>
    定义函数 void clearerr(FILE * stream);
    函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。
    返回值

    fclose(关闭文件)
    相关函数 closefflushfopensetbuf
    表头文件 #include<stdio.h>
    定义函数 int fclose(FILE * stream);
    函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。
    返回值 若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno
    错误代码 EBADF表示参数stream非已打开的文件。
    范例 请参考fopen()。

    fdopen(将文件描述词转为文件指针)
    相关函数 fopenopenfclose
    表头文件 #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\n”,”hello!”);
    fclose(fp);
    }

    执行 hello!

    feof(检查文件流是否读到了文件尾)
    相关函数 fopenfgetcfgetsfread
    表头文件 #include<stdio.h>
    定义函数 int feof(FILE * stream);
    函数说明 feof()用来侦测是否读取到了文件尾,尾数streamfopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0
    返回值 返回非零值代表已到达文件尾。

    fflush(更新缓冲区)
    相关函数 writefopenfclosesetbuf
    表头文件 #include<stdio.h>
    定义函数 int fflush(FILE* stream);
    函数说明 fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数streamNULLfflush()会将所有打开的文件数据更新。
    返回值 成功返回0,失败返回EOF,错误代码存于errno中。
    错误代码 EBADF 参数stream指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。

    fgetc(由文件中读取一个字符)
    相关函数 openfreadfscanfgetc
    表头文件 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(由文件中读取一字符串)
    相关函数 openfreadfscanfgetc
    表头文件 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(返回文件流所使用的文件描述词)
    相关函数 openfopen
    表头文件 #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\n”,fd);
    fclose(fp);
    }

    执行 fd=3


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


    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_CURSEEK_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\n”,ftell(stream));
    rewind(stream);
    fgetpos(stream,&pos);
    printf(“offset=%d\n”,pos);
    pos=10;
    fsetpos(stream,&pos);
    printf(“offset = %d\n”,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\n”,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所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。
    返回值 成功则返回c字符,若有错误则返回EOF

     

    展开全文
  • C++文件操作函数-读写文件

    千次阅读 2017-06-10 16:13:09
    文件读写是基础中的基础,关于此类知识的文章非常多,但还是想根据自己的使用心得去总结这么一些内容。 主要内容有:1.文件的打开和关闭;2.文件的读写操作(包括二进制文件的读写也介绍了一些)

    文件读写是基础中的基础,关于此类知识的文章非常多,但还是想根据自己的使用心得去总结这么一些内容。

    1.文件的打开和关闭

    打开和关闭

    fopen()函数

    FILE *fopen(char *filename, *type);

    filename:可以包含 路径 和 文件名 两部分。如:“TEST.dat”、“C:\tc\TEST.dat”
    type:
    “r”打开文件只读。
    “w”创建文字文件只写。
    “a”增补,如果文件不存在则创建一个。
    “r+”打开一个文字文件读/写。
    “w+”创建一个文字文件读/写。
    “a+”打开或创建一个文件增补。
    “b”二进制文件(可以和以上每一项合并用)。
    “t”文本文件(默认项)。
    返回值:成功打开文件则返回文件指针;否则返回空指针(NULL)

    例:
    FILE *fp = fopen(strDEMFile.c_str(),_T("r"));//UNICODE以读方式打开文件
    【strDEMFile 是const string类型】
    另有:fopen_s()函数
    FILE*fp;
    fopen_s(&fp,strfileName.GetBuffer(),_T(“r”));//不能直接FILE *fp = fopen_s……
    【strfileName是CString类型,应该也可以是string类型,但不能用const修饰!】

    关闭

    fclose()函数

    int fclose(FILE *stream);//当文件关闭成功时,返回0,否则返回一个非0值;
    GetBuffer(); 本函数常见于文件的打开等数据操作,由于在很多情况下需要路径是const string类型,但路径变量又是非常量。用法见上

    文件的读写操作

    文件的顺序写

    fprintf()函数

    int fprintf (FILE *stream, const char *format,)
    FILE *stream:文件指针
    const char *format:输出格式
    < variable-list >(输出变量列表)
    返回值: 是输出的字符数,发生错误时返回EOF(值为-1)。
    例:
    fprintf (fp,"%d\n", i);//向文件写入一个整型 变量i

    fputs()-fputc函数

    int fputs ( const char * str, FILE * stream );//向文件写入一个字符串
    str:可以是字符型指针 或者 字符串常量
    FILE *stream:文件指针
    返回值:是输出的字符数,发生错误时返回EOF(值为-1)。
    例:
    fputs ("FuckWorld!\n", fp);

    int fputc ( int c, FILE *stream );//向文件写入一个字符
    c:可以是字符
    FILE *stream:文件指针
    返回值:是输出的字符数,发生错误时返回EOF(值为-1)。
    例:

    char strptr1[] = "This is a test of fputc!!\n";
    char *p;
    p = strptr1;
    while( (*p != '\0') && fputc(*(p++), fp) != EOF ) ;//这句话写的挺漂亮的

    fscanf()函数

    int fscanf ( FILE *stream, const char *format, );//顺序读取文件,遇空格和换行符结束
    FILE *stream:文件指针
    const char *format:输出格式
    (输出变量列表)
    返回值:成功,返回读入参数的个数;失败,返回EOF(值为-1)
    例:
    fscanf(fp, “%d”, &n);//加取地址符&
    fscanf(fp, “%s”, s);//注意:读入字符串时不要取地址符!【s 为char型,如:char s[10];】
    另有:fscanf_s()
    例:fscanf_s(fp, “%lf %lf”, &dX, &dY);//获取X,Y坐标【lf-double】

    fgets()函数

    char *fgets ( char *buf, intbufsize, FILE *stream );//按顺序读bufsize个字符串,遇到换行符结束
    *buf:字符型指针,指向用来存储所得数据的地址。
    bufsize: 整型数据,指明存储数据的大小。
    FILE *stream:文件指针
    返回值:成功,则返回第一个参数buf;在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
    例:
    if( fgets( line, 100, stream ) == NULL)
    printf(“fgets error\n” );
    else
    printf( “%s”, line);//输出读取的字符串

    fgetc()函数

    int fgetc(FILE *stream);//按顺序读取文件,每次读取一个字符,读取后,光标位置后移一个字节。
    FILE *stream:文件指针
    返回值:成功,则返回所读取的一个字节;失败,(读到文件末尾或出错)则返回EOF

    二进制文件的读写(随机读写)

    常用读写方法:

    int fseek(FILE * stream, long offset, int fromwhere); //设置文件指针stream的位置
    int fread(void *buf, int size, int count, FILE *stream); //二进制读
    int fwrite(void *buf, int size, int count, FILE *stream); //二进制写
    long ftell(FILE *stream); //获取文件位置指针当前位置相对于文件首的偏移字节数

    Tips:
    fputs和fwrite函数在输入’\n’的时候,会最自动在前面添加一个’\r’,这样会导致最后输出的文本多一行空行,想要不自动加,则在fopen的时候就指定“b”参数(二进制文件)

    展开全文
  • LoadRunner文件操作函数详解

    千次阅读 2015-09-10 11:34:36
    文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的读写操作 fgetc 从文件中读取一个字符 fputc 写一个字符到文件中去 fgets 从文件中读取一个字符串 fputs 写一个字符串到...

    涉及的函数汇总:

    文件的打开操作 fopen 打开一个文件
    文件的关闭操作 fclose 关闭一个文件
    文件的读写操作 fgetc 从文件中读取一个字符
             fputc 写一个字符到文件中去
             fgets 从文件中读取一个字符串
             fputs 写一个字符串到文件中去
             fprintf 往文件中写格式化数据
             fscanf 格式化读取文件中数据
             fread 以二进制形式读取文件中的数据
             fwrite 以二进制形式写数据到文件中去
    文件状态检查函数 feof 文件结束
             ferror 文件读/写出错

    #文件的打开
    定义:按指定的方式打开文件
    函数形式:long fopen( const char *filename, const char *access_mode );
    这里写图片描述
    功能说明:
    按照access_mode指定的模式,打开由filename指定的文件,若找不到指定文件,则按以下方式之一处理:

    1. 若access_mode指定为按写方式打开文件,则就按filename指定的文件名创建新文件
    2. 若access_mode指定为按读方式打开文件,就会产生错误

    打开文件的作用:

    1. 分配给打开文件一个long类型的文件变量,并将有关信息填入该变量
    2. 开辟一个缓冲区
    3. 调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件

    返回值:
    正常返回:指向打开文件的指针
    异常返回:空指针NULL,表示打开文件操作失败

    #文件的关闭
    定义:关闭文件
    函数形式:int fclose( FILE *file_pointer );
    功能说明:关闭由file_pointer指向的文件,释放由file_pointer指定的文件类型指针
    返回值:
    正常返回:0
    异常返回:EOF,表示文件在关闭时发生错误

    示例:
    Action()
    {
        long file_stream; 
        char *filename = "f:\\readme.txt"; 
        // Open the file with read access 
        if ((file_stream = fopen(filename, "r")) == NULL) { 
            lr_error_message ("打开 %s 文件时失败", filename); 
            return -1; 
        }
        if (fclose(file_stream)) 
            lr_error_message ("文件 %s 关闭时出错", filename); 
        return 0;
    }

    #文件的读写操作

    从文件中读取一个字符

    函数形式:int fgetc( FILE *file_pointer );
    功能说明:从指向文件的指针file_pointer中读取一个字符。
    返回值:
    正常返回:返回读取的字符代码。
    异常返回:如果到达文件的末尾或者读取时发生错误,则返回EOF。

    示例:
    #define NUM_CHARS 3
    Action()
    {
        long file_stream; 
        char buffer[100],ch;
        int i,total=0;
        char *filename = "f:\\readme.txt"; 
        // Open the file with read access 
        if ((file_stream = fopen(filename, "r")) == NULL) { 
            lr_error_message ("打开 %s 文件失败", filename); 
            return -1; 
        }
        for (i=0;(i<NUM_CHARS)&&(feof(file_stream)==0);i++) {
            ch=fgetc(file_stream);
            buffer[i]=ch;
        }
        buffer[i]=NULL;
        lr_error_message("First %d characters of file %s are \"%s\"",NUM_CHARS,filename,buffer);
        if (fclose(file_stream)) 
            lr_error_message ("文件 %s 关闭时出错", filename); 
        return 0;
    }
    
    output:
    Starting action Action.
    Action.c(27): Error: First 3 characters of file f:\readme.txt are "loa"
    Ending action Action.

    写一个字符到文件中去

    函数形式:int fputc( int c, FILE *file_pointer );
    功能说明:向指向文件的指针file_pointer中写入一个字符。
    返回值:
    正常返回:返回写入的字符代码。
    异常返回:如果发生错误,则返回EOF。

    示例
    Action()
    {
        long file_stream; 
        char *p,str[]="this is the first line of the log file";
        int c;
        char *filename = "f:\\logfile.txt"; 
        // Create a new file  
        if ((file_stream = fopen(filename, "w+")) == NULL) { 
            lr_error_message ("创建 %s 文件失败", filename); 
            return -1; 
        }
        //p指向字符数组str的第一个字符
        p=str;
        while ((*p!=NULL)&&fputc(*(p++),file_stream)!=-1);
        if (fclose(file_stream)) 
        lr_error_message ("文件 %s 关闭时出错", filename); 
        return 0;
    }

    从文件中读取一个字符串

    函数形式:char *fgets( char *string, int maxchar, FILE *file_pointer );
    功能说明:从指向文件的指针file_pointer中读入一个字符串。
    返回值:
    正常返回:返回读取的字符串。
    异常返回:如果到达文件的末尾或者读取时发生错误,则返回空指针。

    示例:
    Action()
    {
        int i, total = 0; 
        char line[22],ch;
        long file_stream; 
        char *filename = "f:\\readme.txt"; 
        // Open the file with read access 
        if ((file_stream = fopen(filename, "r")) == NULL) { 
             lr_error_message ("打开 %s 文件失败", filename); 
            return -1; 
        } 
        // Get the first line from the file 
        if (fgets(line, 22, file_stream) == NULL) 
            lr_output_message("fgets error"); 
        else 
            lr_output_message( "The first line is \"%s\"", line); 
        if (fclose(file_stream)) 
            lr_error_message("Error closing file %s", filename); 
        return 0;
    }
    
    output:
    Starting action Action.
    Action.c(31): The first line is "loadrunner9.5破解方法"
    Ending action Action.

    写入一个字符串到文件中去

    函数形式:int *fputs( char *str, FILE *file_pointer );
    功能说明:向指向文件的指针file_pointer中写入一个字符串。
    返回值:
    正常返回:返回写入的字符串。
    异常返回:如果发生错误,则返回EOF。

    示例:
    Action()
    {
        long file_stream; 
        char str[]="this is the first line of the log file";
        char *filename = "f:\\logfile.txt"; 
        // Create a new file  
        if ((file_stream = fopen(filename, "w+")) == NULL) { 
            lr_error_message ("创建 %s 文件失败", filename); 
            return -1; 
        }
        fputs(str,file_stream);
        if (fclose(file_stream)) 
           lr_error_message ("文件 %s 关闭时出错", filename); 
        return 0;
    }

    向文件中写入格式化数据

    函数形式:int fprintf( FILE *file_pointer, const char *format_string [, args ] );
    功能说明:向指向文件的指针file_pointer中写入格式化数据。
    返回值:
    正常返回:返回写入的字符总数。
    异常返回:如果发生错误,则返回负数。

    示例:
    Action()
    {
        long file_stream; 
        int id;
        char *groupname;
        char *filename = "f:\\logfile.txt"; 
        // Create a new file  
        if ((file_stream = fopen(filename, "w+")) == NULL) { 
            lr_error_message ("创建 %s 文件失败", filename); 
            return -1; 
        }
        //返回虚拟用户的信息
        lr_whoami(&id,&groupname,NULL);
        fprintf(file_stream,"log file of virtual user ID: %d group: %s\n",id, groupname);
        if (fclose(file_stream)) 
            lr_error_message ("文件 %s 关闭时出错", filename); 
        return 0;
    }

    写入数据如下图:
    这里写图片描述

    以二进制形式读取文件中的数据
    函数形式:size_t fread( void *buffer, size_t size, size_t count, FILE *file_pointer );
    功能说明:从指向文件的指针file_pointer中读取非格式化数据,保存至缓冲区buffer。
    返回值:
    正常返回:返回实际读取数据块的总数。
    异常返回:如果读取的数据块个数与请求的数量不一致,则说明发生了错误,返回值0。此时可用feof()和ferror()来跟进出现了什么问题。
    这里写图片描述

    Action()
    {
        long file_stream; 
        int count, total = 0; 
        char buffer[1000]; 
        char *filename = "f:\\logfile.txt"; 
        // Create a new file  
        if ((file_stream = fopen(filename, "r")) == NULL) { 
            lr_error_message ("打开 %s 文件失败", filename); 
            return -1; 
        }
        // Read until end of file 
        while (!feof(file_stream)) { 
            // Read 1000 bytes while maintaining a running count 
            count = fread(buffer, sizeof(char), 1000, file_stream); 
            lr_output_message ("%3d bytes read", count); 
            if (ferror(file_stream)) { /* Check for file I/O errors */ 
                lr_output_message ("Error reading file %s", filename); 
                break; 
            } 
            total += count; // Add up actual bytes read 
        }
        // Display final total 
        lr_output_message ("Total number of bytes read = %d", total ); 
        if (fclose(file_stream)) 
            lr_error_message ("文件 %s 关闭时出错", filename); 
        return 0;
    }
    
    output:
    Starting action Action.
    Action.c(28):  44 bytes read
    Action.c(44): Total number of bytes read = 44
    Ending action Action.

    以二进制形式写数据到文件中去

    函数形式:size_t fwrite( const void *buffer, size_t size, size_t count, FILE *file_pointer );
    功能说明:从缓冲区中读取非格式化数据,保存至指向文件的指针file_pointer中。
    返回值:
    正常返回:返回实际写入数据块的总数。
    异常返回:如果发生错误,返回值0。
    这里写图片描述

    struct student_data { 
            int student_id; 
            unsigned char marks[10]; 
            };
    Action()
    {
        long file_stream; 
        int i;
        struct student_data sd;
        char *filename = "f:\\logfile.txt"; 
        // Create a new file  
        if ((file_stream = fopen(filename, "w+")) == NULL) { 
            lr_error_message ("创建 %s 文件失败", filename); 
            return -1; 
        }
        sd.student_id = 1001; 
        // Set the marks of student 1001 
        for (i = 0; i < 10; i++) 
        sd.marks[i] = (unsigned char)(85 + i); 
        // Write student record to the file 
        i = fwrite(&sd, sizeof(struct student_data), 1, file_stream); 
        if (i > 0) 
            lr_output_message ("Successfully wrote %d record", i);  
        if (fclose(file_stream)) 
            lr_error_message ("文件 %s 关闭时出错", filename); 
        return 0;
    }

    写入数据如下图:
    这里写图片描述

    #文件状态检查

    文件结束检查

    函数形式:int feof( FILE *file_pointer );
    功能说明: 检查文件是否已到结尾。
    返回值:
    0:假值,表示文件未结束。
    1:真值,表示文件结束。

    文件读\写出错检查

    函数形式:int ferror( FILE *file_pointer );
    功能说明: 检查由file_pointer 指定的文件在读写时是否出错。
    返回值:
    0:假值,表示无出错。
    1:真值,表示有出错。

    参考资料:C语言文件操作详解 http://www.cnblogs.com/likebeta/archive/2012/06/16/2551780.html

    展开全文
  • c文件操作函数

    千次阅读 2007-03-12 11:26:00
    c文件操作函数 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 ...

    c文件操作函数
     
     
    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/n”,”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/n”,fd);
     
     fclose(fp);
    }
     
    执行  fd=3
     
      
    fopen(打开文件) 
    相关函数  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 3
    struct 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/n”,i,s[i].name,i,s[i].size);
    }
     
    执行  name[0]=Linux! size[0]=6
    name[1]=FreeBSD! size[1]=8
    name[2]=Windows2000 size[2]=11
     
     
    freopen(打开文件) 
    相关函数  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/n”,ftell(stream));
     
     rewind(stream);
     fgetpos(stream,&pos);
     printf(“offset=%d/n”,pos);
     
     pos=10;
     
     fsetpos(stream,&pos);
     printf(“offset = %d/n”,ftell(stream));
     
     fclose(stream);
    }
     
    执行  offset = 5
    offset =0
    offset=10
     
      
    ftell(取得文件流的读取位置) 
    相关函数  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 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(由文件中读取一个字符) 
    相关函数  read,fopen,fread,fgetc
    表头文件  #include<stdio.h>
    定义函数  int getc(FILE * stream);
    函数说明  getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。虽然getc()与fgetc()作用相同,但getc()为宏定义,非真正的函数调用。
    返回值  getc()会返回读取到的字符,若返回EOF则表示到了文件尾。
    范例  参考fgetc()。
     
      
    getchar(由标准输入设备内读进一字符) 
    相关函数  fopen,fread,fscanf,getc
    表头文件  #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(由标准输入设备内读进一字符串) 
    相关函数  fopen,fread,fscanf,fgets
    表头文件  #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/n”,template);
    }
     
     
     
    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()。
     
     
    putchar(将指定的字符写到标准输出设备) 
    相关函数  fopen,fwrite,fscanf,fputc
    表头文件  #include<stdio.h>
    定义函数  int putchar (int c);
    函数说明  putchar()用来将参数c字符写到标准输出设备。
    返回值  putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。
    附加说明  putchar()非真正函数,而是putc(c,stdout)宏定义。
    范例  参考getchar()。
     
     
     
    rewind(重设文件流的读写位置为文件开头) 
    相关函数  fseek,ftell,fgetpos,fsetpos
    表头文件  #include<stdio.h>
    定义函数  void rewind(FILE * stream);
    函数说明  rewind()用来把文件流的读写位置移至文件开头。参数stream为已打开的文件指针。此函数相当于调用fseek(stream,0,SEEK_SET)。
    返回值  
    范例  参考fseek()
     

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

    setlinebuf(设置文件流为线性缓冲区) 
    相关函数  setbuffer,setbuf,setvbuf
    表头文件  #include<stdio.h>
    定义函数  void setlinebuf(FILE * stream);
    函数说明  setlinebuf()用来设置文件流以换行为依据的无缓冲IO。相当于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);请参考setvbuf()。
    返回值 
     
     
    setvbuf(设置文件流的缓冲区) 
    相关函数  setbuffer,setlinebuf,setbuf
    表头文件  #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。如果参数buf为NULL指针,则为无缓冲IO。
    返回值 
     
     
    ungetc(将指定字符写回文件流中) 
    相关函数  fputc,getchar,getc
    表头文件  #include<stdio.h>
    定义函数  int ungetc(int c,FILE * stream);
    函数说明  ungetc()将参数c字符写回参数stream所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。
    返回值  成功则返回c 字符,若有错误则返回EOF。
      

    展开全文
  • C语言中文件操作函数汇总

    千次阅读 多人点赞 2018-04-13 19:56:54
    fopen函数 --- 打开一个文件函数原型:FILE* fopen(const char *path, const char *mode);参数:参数path是需要打开文件的文件名,通常把它叫做文件的路径, 参数 mode 是打开文件的权限(只读、只写、读写等)...
  • C++文件操作函数详解

    千次阅读 2016-06-15 12:51:15
    转载:... C++通过以下几个类支持文件的输入输出 (1) ofstream:写操作,输出文件类; (2) ifstream:读操作,输入文件类; ...(3) fstream:可同时读写的文件类。...1. open函数:打开文件
  • C语言文件操作函数详解

    千次阅读 多人点赞 2018-08-26 23:20:43
    C语言中没有输入输出语句,所有的输入输出功能都用 ...文件操作标准库函数有:  文件的打开操作 fopen 打开一个文件  文件的关闭操作 fclose 关闭一个文件  文件的读写操作 fgetc 从文件中读取一个字符  ...
  • 2.1 打开文件函数 2.2 创建文件函数 三、符号常量头文件unistd.h 3.1 关闭文件函数 3.2 确定文件偏移量函数 一、文件描述符 文件描述符:对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个...
  • 我把文件指针都关闭了,可是调用rename(重命名文件)和remove(删除文件函数都不...把中间对文件操作注释掉也一样,不知道哪里出了问题。。。两个函数的返回值都是-1,我也去查了原因,网络上讲解的好像都不是呀
  • Python提供了多种文件操作方式,这里简单介绍os.open、io.open、内置函数open之间的关系: 一、内置函数open和io.open实际上是同一个函数,后者是前者的别名; 二、os.open与内置函数open的关系 os.open是文件操作...
  • 文件操作函数(三)—— 文件的随机读写

    千次阅读 多人点赞 2021-03-20 16:10:36
    文章目录 前言 fseek函数 ftell函数 rewind函数 拓:用fseek函数与ftell函数求文件大小 前言 在文件操作函数(二)中,我们介绍了文件的顺序读写函数,即挨着顺序对文件中的数据进行输入或输出操作的函数。...
  • VC++文件操作函数解析

    千次阅读 2012-08-29 16:50:08
    ftell:功 能:返回当前文件... 函数功能:函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数
  • C语言文件操作函数总结——超详细

    千次阅读 多人点赞 2018-11-12 10:49:52
    文件与流 在C语言中有三种标准流: stdin(standard input stream)标准输入流。在大多数环境中为从键盘输入;scanf( )和getchar( )等函数会从该流中读取字符 stdout(standard output stream)标准输出流。在大多数...
  • 功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。 所需头文件:#include ,#include ,#include 函数原型:int open(const char *pathname,int flags,int perms) ...
  • c 语言文件操作函数

    千次阅读 2011-07-30 09:41:36
    C语言的文件操作 文件的基本概念  所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 ...
  • 使用C#语言中的File类我们能够非常轻松的使用一些文件操作函数来完成对文件简单的读写操作: ReadAllByte()函数,将文件中的文字内容转成byte数组并返回。 案例)读取文件,并输出到控制台上 【准备读取的文件】...
  • C#中的读写文件操作函数总结

    千次阅读 2016-06-29 20:16:21
    fopen, fclose, fwrite是C/C++中,用于文件读取写入的函数。 在C#语言中,有很多方法可以进行文件读写。 下面是通过StreamReader,FileStream,StreamWriter进行文件读写的范例。 // 头文件引用 using ...
  • BCB的文件操作函数

    千次阅读 2009-03-05 09:10:00
    FileOpen 打开指定的文件,如果返回为正数,表示操作成功,返回值为文件句柄:如果返回值为-1,表 示操作失败,函数原型如下: int __fastcall FileOpen(const System::AnsiString FileName,int Mode); 2. F
  • LINUX下文件操作函数

    万次阅读 2009-11-10 15:13:00
    Linux的文件操作API涉及到创建、打开、读写和关闭文件。1.linux API 创建int creat(const char *filename, mode_t mode); 参数mode指定新建文件的存取权限,它同umask一起决定文件的最终权限(mode&umask),其中...
  • 文件操作函数全集 Linux C

    千次阅读 2007-10-20 08:57:00
    clearerr(清除文件流的错误旗标) 相关函数 feof
  • 以前一直都是用fopen、fwrite等高级函数文件,这次尝试用open、write、close操作文件。代码如下: int ret = OB_SUCCESS; int fd = open(config_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU | S_IRWXG...
  •  在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: (1)fopen()函数:打开文 包含头文件:#include 格式:FILE * fopen(const char * ...
  • http://hi.baidu.com/dujt/blog/item/f6e6704ab5d8932508f7ef2c.html 在ANSI C中,对文件的操作分为...一、流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:typedef struct {int leve
  • fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc表头文件 include定义函数 char * fgets(char * s,int size,FILE * stream);函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所...
  • #include #include void main() { FILE *fStream =NULL; fStream = fopen("d:\WIMRepairRead.txt","rw+");//包含在stdio.h中 ...把文件内部指针退回到文件结尾EOF处,此处的字符为空字符。。
  • C语言文件操作相关函数

    千次阅读 多人点赞 2019-04-22 11:41:20
    我们就需要掌握一些文件操作函数了。 文件名 一个文件要有一个唯一的文件标识,以便用户识别和引用。文件名包含:文件路径+文件名主干+文件后缀 在电脑中一个文件名为: 但在程序中,为了与一些转移字符区分开,...
  • C语言字符串常用操作函数C语言字符串、文件操作常用操作函数标准输入/输出重定向文件操作补充 C语言字符串、文件操作常用操作函数 字符串输出 - puts int puts(const char *str) 字符串写入到标准输出 stdout 字符...
  • C++文件操作Read函数

    千次阅读 2018-08-21 15:06:56
    1. read 头文件: #include &lt;unistd.h&gt; 函数原型: ssize_t read(int filedes, void *buf, ... read 函数从 filedes 指定的已打开文件中读取 nbytes 字节到 buf 中。以下几种情况会导致读取到的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,882,734
精华内容 753,093
关键字:

文件操作函数