zoukankan      html  css  js  c++  java
  • C语言文件操作

    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+"相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置.
    “rt”     只读打开一个文本文件,只允许读数据
    “wt”        只写打开或建立一个文本文件,只允许写数据
    “at”        追加打开一个文本文件,并在文件末尾写数据
    “rb”       只读打开一个二进制文件,只允许读数据
    “wb”       只写打开或建立一个二进制文件,只允许写数据
    “ab”     追加打开一个二进制文件,并在文件末尾写数据
    “rt+”    读写打开一个文本文件,允许读和写。用fseek确定读写位置,写多少覆盖多少,后面的内容保留。因为磁盘空间是连续的,所以你不能在中间插入,在中间一旦写入就是覆盖与写入内容等长的那些内容。
    “wt+”    读写打开或建立一个文本文件,允许读写
    “at+”    读写打开一个文本文件,允许读,或在文件末追加数据
    “rb+”    读写打开一个二进制文件,允许读和写
    “wb+”    读写打开或建立一个二进制文件,允许读和写
    “ab+”     读写打开一个二进制文件,允许读,或在文件末追加数据

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

  • 相关阅读:
    HBase with MapReduce (MultiTable Read)
    HBase with MapReduce (SummaryToFile)
    HBase with MapReduce (Summary)
    HBase with MapReduce (Read and Write)
    HBase with MapReduce (Only Read)
    Hbase中的BloomFilter(布隆过滤器)
    HBase的快照技术
    How To Use Hbase Bulk Loading
    Cloudera-Manager修改集群的IP
    Java中的HashSet和TreeSet
  • 原文地址:https://www.cnblogs.com/wanghetao/p/2206499.html
Copyright © 2011-2022 走看看