C格式讀取文件

最近經常會使用C語言讀寫文件,所以在此總結一下。

 在C語言中,文件操作都是由庫函數來完成的,可以分爲讀和寫兩種操作。操作流程爲使用fopen()打開文件>>使用下面的庫函數讀或寫文件>>fclose()關閉文件

 下面先列出會用到的庫函數。

一、打開文件

fopen() 用來打開文件操作。

語法:文件指針名=fopen(文件路徑,使用文件方式);

例子:FILE *fs = fopen("D:\\1.txt","w+");//這裏是使用讀寫的方式打開D:\1.txt文件,同時返回一個FILE類型的指針,如果文件打不開,返回NULL

使用文件的方式共有12種,下面給出了它們的符號和意義。
文件使用方式 
意義 
“rt”   只讀打開一個文本文件,只允許讀數據 

“wt” 只寫打開或建立一個文本文件,只允許寫數據 

“at” 追加打開一個文本文件,並在文件末尾寫數據

“rb” 只讀打開一個二進制文件,只允許讀數據 

“wb” 只寫打開或建立一個二進制文件,只允許寫數據 

“ab” 追加打開一個二進制文件,並在文件末尾寫數據 

---------上面每種方式只有一個功能,也就是隻讀或者只寫或者追加,下面的是通過‘+’這個符號,有了可讀可寫兩種能力----------------------------------
“rt+” 讀寫打開一個文本文件,允許讀和寫 

“wt+” 讀寫打開或建立一個文本文件,允許讀寫 

“at+” 讀寫打開一個文本文件,允許讀,或在文件末追加數據 

“rb+” 讀寫打開一個二進制文件,允許讀和寫 

“wb+” 讀寫打開或建立一個二進制文件,允許讀和寫 

“ab+” 讀寫打開一個二進制文件,允許讀,或在文件末追加數據 

現在對上面的文件打開方式做個總結:

文件使用方式由r,w,a,t,b,+六個字符拼成,各字符的含義是: 

r(read): 讀 

w(write): 寫 

a(append): 追加 

t(text): 文本文件,可省略不寫 

b(banary): 二進制文件 

+: 讀和寫 


 二、讀或寫文件操作:

·字符讀寫函數 :fgetc和fputc 

語法:int fgetc(FILE *stream);//返回值: 讀出字符的ASCII碼或EOF(文件結束時)

    int fputc(int ch, file *fp);// ch 待寫入文件的字符的ASCII碼      fp: 待寫文件的文件指針      返回值: 如寫入成功則返回寫入的字符, 否則返回EOF

·字符串讀寫函數:fgets和fputs 

  char *fgets(char *str, int num, FILE *fp) // str: 保存從文件讀取出來的字符串       fp: 待讀文件的文件指針

                      num: 表示從文件中讀出的字符串不超過 n-1個字符。在讀入的最後一個字符後加上串結束標誌'\0'

 ·字符讀寫函數 :fgets和fputs  

  char * fgets(char * s, int n, FILE * stream);當讀到n - 1個字符或換行符時,fgets函數將停止操作。該函數在s的末尾保留換行符,s的末尾增加了一個NULL字符標明串的結束。如果調用成功。將返回由指針s指向的串,如果遇到文件結束符或出錯,將返回EOF。  

   fputs(char * sFILE * stream);                   

·數據塊讀寫函數:freed和fwrite 

語法:

 fread(buffer,size,count,fp);

 fwrite(buffer,size,count,fp);

解釋:

 buffer:是一個指針,對fread來說,它是讀入數據的存放地址。對fwrite來說,是要輸出數據的地址。

  size:要讀寫的字節數;

  count:要進行讀寫多少次size字節的數據項;

  fp:文件型指針。

·格式化讀寫函數:fscanf和fprinf 

語法:int fprintf( FILE *stream, const char *format [, argument ]...); //例子:fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;

    int fscanf(FILE *stream, char *format[,argument...]);

下面通過一段代碼來總結這些函數:

#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
    /*File open and test*/
    FILE *fp;
    char ch[64];
    /*打開文件*/
    if((fp=fopen(argv[2],argv[1]))==NULL)
    {
        printf("文件打開出錯,請檢查文件是否存在\n");
        return -1;
    }
    else printf("文件已經打開。");
    /*讀取文件*/
    if(*argv[1]=='r')
    {
        printf("文件內容是:\n");
        printf("-------------------------------------------\n");
        while(!feof(fp))//判定文件是否結尾
        {
            if(fgets(ch,64,fp)!=NULL)
            printf("%s",ch);
        }
    }
    /*寫文件*/
    if(*argv[1]=='w')
    {
        printf("請輸入內容,關閉文件請直接回車\n");
        printf("-------------------------------------------\n");
        while(strlen(fgets(ch,64,stdin))>1)
        {
            fputs(ch,fp);
        }
    }
    /*文件追加*/
    if(*argv[1]=='a')
    {
        printf("請輸入追加內容,關閉文件請直接回車\n");
        printf("-------------------------------------------\n");
        while(strlen(fgets(ch,64,stdin))>1)
        {
            fputs(ch,fp);
        }
    }
    /*關閉文件*/
    if(fclose(fp)!=0)
    {
        printf("-------------------------------------------\n");
        printf("文件關閉出錯\n");
        return -1;
    }
    else
    {
        printf("-------------------------------------------\n");
        printf("文件以關閉\n");
        return 0;
    }
}

 

ftell語法

 long ftell(FILE *fp);//得到流式文件的當前讀寫位置,其返回值是當前讀寫位置偏離文件頭部的字節數.

fseek語法

語法:int fseek(FILE *fp,long offset,int origin);//把fp的文件讀寫位置指針移到指定的位置.

origin指的是“起始點”,它有三個常量的值,如下:

起始點

對應的數字

  代表的文件位置

SEEK_SET

0   文件開頭

SEEK_CUR

1   文件當前位置

SEEK_END

2   文件末尾

rewind語法

語法:int rewind(FILE *stream); //將文件指針重新指向一個流的開頭 

 例子:

一般我們會通過下面的方法來獲取文件中字符的個數:

FILE *fs=fopen("C:\1.txt","r");//創建文件流

long length=0;//聲明文件長度

fseek(fs,0,SEEK_END);//將文件內部指針放到文件最後面

length=ftell(fs);//讀取文件指針的位置,得到文件字符的個數

rewind(fs);//將文件指針重置到文件最前面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章