1. 程式人生 > >C語言對文件的基本操作

C語言對文件的基本操作

file結構體 參考 b- https rewind 語言 正在 cpp 作文件

在C語言中,對於文件的操作是利用FILE結構體進行的。

幾個常用的操作文件函數簡介

1:打開文件 FILE *fopen( const char *filename, const char *mode );

第一個參數是指向文件名字符串常量的指針類型;

第二個參數指定文件打開的模式。

文件打開模式:

r:讀取,如果文件不存在,函數調用失敗;

w:為寫入操作打開一個空文件。若文件不存在,則創建一個文件;若給定的文件已經存在,那麽它的內容將被清空;

a:為寫入操作打開文件。若文件不存在,則首先創建一個文件;若文件存在,那麽在該文件結尾添加新數據,在寫入數據之前,不會移除已有的EOF標記;

r+:打開文件用於寫入操作和讀取操作,文件必須存在;

w+:寫入和讀取,其他同w;

a+:打開文件用於讀取和添加操作,其他同a。

註:打開文件後一般會做一些文件的讀取或者寫入操作,若文件打開失敗,接下來的讀寫動作也無法順利進行,所以一般在fopen()後作錯誤判斷及處理。

[cpp] view plain copy
  1. #include<stdio.h>
  2. main()
  3. {
  4. FILE * pFile=fopen("zkd","r");
  5. if(pFile==NULL) return;
  6. fclose(pFile);
  7. return 0;
  8. }

2:文件的寫入 size_t fwrite( const void *buffer, size_t  size, size_t count, FILE *stream )

第一個參數:指向將要被寫入文件的數據;

第二個參數:以字節為單位的項的大小。size_t類型,實際上就是unsigned int型;

第三個參數:將要被寫入的項的最大數目;

註:即保證寫入數據大小為第二個參數和第三個參數之積即可。

第四個參數:指向FILE類型的指針,通過fopen獲得。

3:刷新緩沖區 fflush( FILE *stream )

C語言對文件的操作使用了緩存文件系統,即系統自動為每個正在使用的文件在內存中開辟了一塊緩存區域,從內存向磁盤文件寫入的數據先送到內存中的這個緩沖區,直到緩沖區的數據裝滿以後,才把數據一起送到磁盤文件上。

    FILE *pFile=fopen("zkd.txt","w");  
    if (pFile==NULL)  
        return 1;  
    fwrite("I love you!",1,strlen("I love you!"),pFile);  
    fflush(pFile);  

4:文件的關閉 fclose( FILE *stream )

關閉文件,此時也會將緩沖區內容寫入磁盤,但是和fflush相比,接下來若想對文件讀寫,則必須再次打開文件。

5:文件指針定位 int fseek( FILE *stream, long offset, int origin);

在C語言文件操作中,將有一個文件指針,該指針會隨時根據我們對文件的操作來移動位置,始終指向下一個將要寫人的位置;

第二個參數:偏移量(和文件指針的位置相比)

第三個參數:指定文件指針的起始位置,可以取三個值:

SEEK_CUR:從文件當前位置處開始;

SEEK_END:從文件結尾處開始;

SEEK_SET:從文件開始處開始。

6:文件的讀取 size_t fread( void *buffer, size_t size, size_t count, FILE *stream)

第一個參數:指向存放數據的緩沖區;

其他的同fwrite();

7:獲取文件長度方法 long ftell( FILE *stream )

函數 ftell 用於得到文件位置指針當前位置相對於文件首的偏移字節數

先利用fseek函數將文件指針移動到文件的結尾處,然後利用ftell函數就可以得到文件的長度。

fseek(pFile,0,SEEK_END);

int len=ftell(pFile);

len即為文件長度

                #include "stdafx.h"  
                #include <stdio.h>  
                #include <string.h>  
                #include <stdlib.h>  
                  
                int _tmain(int argc, _TCHAR* argv[])  
                {  
                    FILE *pFile=fopen("zkd.txt","r");  
                    if (pFile==NULL)  
                        return 1;  
                    fwrite("I love you!",1,strlen("I love you!"),pFile);  
                    fflush(pFile);  
                    fseek(pFile,0,SEEK_END);  
                    int len=ftell(pFile);  
                    char *ch=(char*)malloc(len+1);  
                //  memset(ch,0,100);  
                    rewind(pFile);  
                    fread(ch,1,len,pFile);  
                    ch[len]=\0;  
                    printf("%s",ch);  
                    fclose(pFile);  
                    return 0;  
                } 

註意點:

文件的打開與關閉是配套的,有文件的打開就有文件的關閉。

在對文件進行讀寫時,需要註意文件位置指針,文件位置指針來控制文件讀寫的位置,例如是在最開始讀寫還是在最後面讀寫。例如當我們調用fgetc()讀取一個字符,文件位置指針就會自動指向下一個字節。

文件指針文件位置指針是不同的兩個概念,文件指針指向整個文件結構,而文件位置指針指向文件讀寫的位置。

參考文章:https://blog.csdn.net/clh19901213/article/details/18269989

C語言對文件的基本操作