• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C語言文件操作函數(shù) 轉(zhuǎn)

            Posted on 2007-12-13 17:09 T.S Liu 閱讀(383) 評論(0)  編輯 收藏 引用 所屬分類: C++

            文章分類"c/c++"里有,但只有基本說明,怕以后遺忘。看這篇相對詳細點就留下做個備忘)

            C語言文件操作函數(shù) http://www.cnblogs.com/nniixl/archive/2007/04/23/724235.aspx

            分類:C/C
            13.1C語言文件
            1,兩種文件存取方式(輸入,輸出方式)
            順序存取
            直接存取
            2,數(shù)據(jù)的兩種存放形式
            文本文件
            二進制文件
             
             
            13.2文件指針
            定義文件類型指針變量的一般形式:
            FILE *指針變量名;
            例如:
            FILE *fp1,*fp2;
             
             
            13.3打開文件
            在使用文件之前,需打開文件.在C里使用fopen函數(shù)打開文件.格式為:
            fopen(文件名,文件使用方式);
            此函數(shù)返回一個指向FILE類型的指針.如:
            FILE *fp;
            fp=fopen("file_1","r");
            如果調(diào)用成功,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".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內(nèi)容將被覆蓋)
            4,"wb".為寫而打開二進制文件.
            5,"a".為在文件后面添加數(shù)據(jù)而打開文本文件.(若不存在,則新建;反之,在原文件后追加)
            6,"ab".為在文件后面添加數(shù)據(jù)而打開一個二進制文件.
            最常用的文件使用方式及其含義如下:
            7,"r+".為讀和寫而打開文本文件.(讀時,從頭開始;在寫數(shù)據(jù)時,新數(shù)據(jù)只覆蓋所占的空間,其后不變)
            8,"rb+".為讀和寫而打開二進制文件.只是在隨后的讀寫時,可以由位置函數(shù)設置讀和寫的起始位置.
            9,"w+".首先建立一個新文件,進行寫操作,隨后可以從頭開始讀.(若文件存在,原內(nèi)容將全部消失)
            10,"wb+".功能與"w+"同.只是在隨后的讀寫時,可以由位置函數(shù)設置讀和寫的起始位置.
            最常用的文件使用方式及其含義如下:
            11,"a+".功能與"a"相同;只是在文件尾部添加新的數(shù)據(jù)后,可以從頭開始讀.
            12,"ab+".功能與"a+"相同;只是在文件尾部添加新數(shù)據(jù)之后,可以由位置函數(shù)設置開始讀的起始位置.
             
             
            13.4關(guān)閉文件
            當文件的讀寫操作完成之后,使用fclose函數(shù)關(guān)閉文件.格式如下:
            fclose(文件指針)
            如:fclose(fp);
             

            13.5調(diào)用getc(fgetc)和putc(fputc)函數(shù)進行輸入和輸出
            1,調(diào)用putc(或fputc)函數(shù)輸出一個字符
            調(diào)用形式為:
            putc(ch,fp);
            功能是:將字符ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數(shù)返回所輸出的字符;否則,返回一個EOF值.EOF是在stdio.h庫函數(shù)文件中定義的符號常量,其值等于-1.
             
             
            13.5調(diào)用getc(fgetc)和putc(fputc)函數(shù)進行輸入和輸出
            例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字符@作為鍵盤輸入結(jié)束標志.
            #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.調(diào)用getc(或fgetc)函數(shù)輸入一個字符
            調(diào)用形式為:
            ch=getc(pf);
            功能是:從pf指定的文件中讀如一個字符,并把它作為函數(shù)值返回.
            例如:把一個已存在磁盤上的file_1.dat文本文件中的內(nèi)容,原樣輸出到終端屏幕上.
            #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判斷文件結(jié)束函數(shù)feof
            EOF可以作為文本文件的結(jié)束 標志,但不能作為二進制文件的結(jié)束符.feof函數(shù)既可以判斷二進制文件,又可以判斷文本文件.
            例:編寫程序,用于把一個文本文件(源)復制到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:
            可執(zhí)行程序名 源文件名 目的文件名
            #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函數(shù)和fprintf函數(shù)
            1,fscanf函數(shù)
            fscanf只能從文本文件中按格式輸入,和scanf函數(shù)相似,只不過輸入的對象是磁盤上文本文件中的數(shù)據(jù).調(diào)用形式為:
            fscanf(文件指針,格式控制字符串,輸入項表)
            例如:fscanf(fp,"%d%d",&a,&b);
            fscanf(stdin,"%d%d",&a,&b);
            等價于scanf("%d%d",&a,&b);
            3.fprintf函數(shù)
            fprintf函數(shù)按格式將內(nèi)存中的數(shù)據(jù)轉(zhuǎn)換成對應的字符,并以ASCII代碼形式輸出到文本文件中.Fprintf函數(shù)和printf函數(shù)相似,只是將輸出的內(nèi)容按格式存放到磁盤的文本文件中.調(diào)用形式如下:
            fprintf(文件指針,格式控制字符串,輸出項表)
            如:fprintf(fp,"%d %d",x,y);
            以下語句 fprintf(stdout,"%d %d",x,y)
             

            13.8fgets函數(shù)和fputs函數(shù)
            1,fgets函數(shù)
            fgets函數(shù)用來從文件中讀入字符串.調(diào)用形式如下:
            fgets(str,n,fp);
            函數(shù)功能是:從fp所指文件中讀入n-1個字符放入str為起始地址的空間內(nèi);如果在未讀滿n-1個字符時,則遇到換行符或一個EOF結(jié)束本次讀操作,并已str作為函數(shù)值返回.
            13.8fgets函數(shù)和fputs函數(shù)
            2,fputs函數(shù)
            fput函數(shù)把字符串輸出到文件中.函數(shù)調(diào)用形式如下:
            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函數(shù)和fwrite函數(shù)
            例如有如下結(jié)構(gòu)體:
            struct st{
            char num[8];
            float mk[5];
            }pers[30];
            以下循環(huán)將把這30個元素中的數(shù)據(jù)輸出到fp所指文件中.
            for(i=0;i<30;i++)
            fwrite(&pers[i],sizeof(struct st),1,fp);
             

            13.9fread函數(shù)和fwrite函數(shù)
            以下語句從fp所指的文件中再次將每個學生數(shù)據(jù)逐個讀入到pers數(shù)組中.
            i=0;
            fread(&pers[i],sizeof(struct st),1,fp);
            while(!feof(fp))
            { i++;
            fread(&pers[i],sizeof(struct st),1,fp);
            }
             

            13.10文件定位函數(shù)
            1,fseek函數(shù)
            fseek函數(shù)用來移動文件位置指針到指定的位置上,接著的讀或?qū)懖僮鲗拇宋恢瞄_始.函數(shù)的調(diào)用形式如下:
            fseek(pf,offset,origin)
            pf:文件指針
            offset:以字節(jié)為單位的位移量,為長整形.
            origin:是起始點,用來指定位移量是以哪個位置為基準的.
            1,fseek函數(shù)
            位移量的表示方法
            標識符 數(shù)字 代表的起始點
            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函數(shù)
            ftell函數(shù)用以獲得文件當前位置指針的位置,函數(shù)給出當前位置指針相對于文件開頭的字節(jié)數(shù).如;
            long t;
            t=ftell(pf);
            當函數(shù)調(diào)用出錯時,函數(shù)返回-1L.
            我們可以通過以下方式來測試一個文件的長度:
            fseek(fp,0L,SEEK_END);
            t=ftell(fp);
            3.rewind函數(shù)
            調(diào)用形式為:
            rewind(pf);
            函數(shù)沒有返回值.函數(shù)的功能是使文件的位置指針回到文件的開頭.
             

            13.10文件應用
            在磁盤上的test.txt文件中放有10個不小于2的正整數(shù),用函數(shù)調(diào)用方式編寫程序.要求實現(xiàn):
            1,在被調(diào)函數(shù)prime中,判斷和統(tǒng)計10個整數(shù)中的素數(shù)以及個數(shù).
            2,在主函數(shù)中將全部素數(shù)追加到磁盤文件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);
            }
            7777精品伊人久久久大香线蕉| 久久se精品一区二区影院| 99久久综合狠狠综合久久| 青青青国产精品国产精品久久久久| 亚洲精品蜜桃久久久久久| 亚洲精品乱码久久久久66| 久久精品国产久精国产思思 | 伊人久久精品影院| 亚洲人成电影网站久久| 亚洲中文久久精品无码| 日日躁夜夜躁狠狠久久AV| 99麻豆久久久国产精品免费| 久久av免费天堂小草播放| 亚洲中文字幕无码久久2020| 99精品国产在热久久无毒不卡| 精品无码久久久久久尤物| 国产A级毛片久久久精品毛片| 伊人久久精品影院| 天天久久狠狠色综合| 精品久久久久久无码不卡| 久久夜色精品国产噜噜噜亚洲AV| 热久久这里只有精品| 亚洲熟妇无码另类久久久| 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲午夜精品久久久久久浪潮| 久久夜色tv网站| 91麻豆国产精品91久久久| 久久狠狠高潮亚洲精品| 久久亚洲AV无码西西人体| 国产产无码乱码精品久久鸭| 久久伊人精品青青草原日本| 久久亚洲春色中文字幕久久久| 麻豆精品久久久一区二区| 久久精品一本到99热免费| 久久精品国产精品亚洲下载| 日本欧美久久久久免费播放网| 久久美女人爽女人爽| 77777亚洲午夜久久多喷| 久久国产欧美日韩精品| 久久亚洲sm情趣捆绑调教| 久久青青草原精品国产不卡|