檔案隨機讀寫就是不按常規讀寫檔案,想從哪兒入手就從哪兒入手,比如說,你聽歌時,欸,就這幾句好聽,那截下來當鈴聲,那擷取點就是隨機讀寫的一個位置。檔案隨機讀寫呢,有3板斧,諸位請看。
1.rewind()函式rewind()函式的作用是將檔案位置指標指向檔案開頭,不管你的檔案位置指標在哪兒指著呢,rewind()函式一出場,必須撥拉到開頭。
void rewind(FILE * stream);
在rewind()函數里面,void表示這個函式沒有返回值,引數stream表示一個檔案指標,就是把這個檔案指標指向的檔案的位置指標撥拉到開頭。是不是有點繞?繞就對了。stream就當作是一個檔案,把stream檔案的位置指標指向開頭,明白了?
2.fseek()函式fseek()函式的作用嘛,將檔案位置指標指向指定的位置,比如,往前移動一些距離,往後移動一些距離,像秤上的遊標一樣,沒見秤的,自行去百度。
int fseek(FILE * stream, long offset, int whence);
在fseek()函數里面,引數stream還是那個檔案指標,引數offset表示移動的距離,引數whence表示檔案位置指標原先的位置,就是從哪兒開始移動的。whence有3個取值:
SEEK_SET:對應的數字值為0,表示從檔案開頭進行偏移。SEEK_CUR:對應的數字值為1,相對於檔案位置指標當前位置進行偏移。SEEK_END:對應的數字值為2,相對於檔案末尾進行偏移。fseek()函式如果呼叫成功,就返回0,呼叫失敗返回-1。
有一點呢要注意,fseek()函式呢是隨便指的,如果指到一個位置,這個位置呢是一個漢字經過字元轉換來的,一個漢字對應三個字元,那麼要切時候可能要把漢字切開的,這時候就亂碼了,所以fseek()函式呢,最好用到二進位制檔案中,不要用到文字檔案中。
3.ftell()函式ftell()函式用於獲取檔案位置指標的當前位置,就是fseek()函式你把檔案位置指標挪哪兒去了,你得告訴我一聲啊,那ftell()函式呢就是告訴你檔案位置指標的位置。
long ftell(FILE * stream);
在ftell()函式中,引數stream還是檔案指標,ftell()函式呼叫成功,返回檔案位置指標的當前位置,呼叫失敗,返回-1L,就是-1。
好,學完了三板斧,實踐起來用一下,先在專案目錄下建立個檔案,比如hello.txt,就隨機讀寫這個hello.txt檔案,上程式碼。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){FILE* fp;char s[16] = { 0 };fp = fopen("hellow.txt", "r");fseek(fp, 7, SEEK_SET);fread(s, 1, 15, fp);fclose(fp);printf("%s", s);return 0;}
關於檔案隨機讀寫呢,就這3板斧,第一板斧先把檔案位置指標指向檔案開頭,呼叫rewind()函式;第二板斧呼叫fseek()函式移動檔案位置指標;第三板斧呼叫ftell()函式告訴我檔案位置指標在哪兒。