<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    weidagang2046的專欄

    物格而后知致
    隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
    數據加載中……

    C語言中對文件的隨機存取

    C語言中對文件的隨機存取
    C語言中要實現對文件的隨機存 取,需要用到兩個函數fseek()、ftell()。下面通過 一個反轉顯示指定文件的程序來介紹這兩個函數的用法。
    r eserve.c:





    #include <
    stdio.h>
    #include <
    stdlib.h>


    #define CNTL_Z '\032' / /DOS 文本中的文件結尾標記
    #define SL EN 50

    int main(int arg c, char *argv[])
    {
    c har file[SLEN];

    char ch ;

    FILE *fp;

    long count, last;


    p uts("Enter the name of the fil e to be processed: ");

    gets(file);

    if( (fp = f open(file, "rb")) == NULL ) //只讀和二進制模式
    {
    printf("reverse can't open %s\n", file);

    exit( 1);

    }

    f seek(fp, 0L, SEEK_SET);
    //定位在文件開頭處
    la st = ftell(fp);

    printf( "fseek(fp, 0L, SEEK_SET) , fte el(p): %d\n", last);

    fseek(fp, 0L, SEEK_END);
    //定位在文件結尾處
    last = ftell(fp);

    printf("fseek(fp, 0L, SEEK_END ) , fteel(p): %d\n", last);


    for(count = 1L;
    c ount <
    = last;
    count++)
    {
    fseek(fp, -cou nt, SEEK_END);

    ch = getc(fp);


    if(ch != CNTL_Z &
    &
    ch != '\r')
    {
    putchar(ch);

    }
    }
    putchar ('\n');

    fclose(fp);


    system("PAUSE");

    return 0;

    }

    假定一個文 件test.txt內容為:





    1234567890
    12345678 90
    1234567890
    1111111112
    2222222223
    3333333334
    執行reserve來進行反轉顯示:
    < br>



    Enter the n ame of the file to be processe d:
    test.txt
    fseek(fp, 0L , SEEK_SET) , fteel(p): 0
    f seek(fp, 0L, SEEK_END) , fteel (p): 72

    4333333333
    3222222222
    2111111111
    09 87654321
    0987654321
    0987 654321

    下面,我們來解釋一下fseek ()和ftell()是如何工作的。
    l fseek()函數




    fseek(移動文件流的讀寫位置)


    相 關函數

    rewind,ftell,fgetp os,fsetpos,lseek


    表頭 文件

    #include<
    stdio.h >



    定義函數

    i nt fseek(FILE * stream,long of fset,int whence);



    函 數說明

    fseek()用來移動文件流的讀寫位 置。參數stream為已打開的文件指針,參數offset為根 據參數whence來移動讀寫位置的位移數。

    < br>參數

    whence為下列其中一種:SE EK_SET從距文件開頭offset位移量為新的讀寫位置。S EEK_CUR 以目前的讀寫位置往后增加offset個位移量 。SEEK_END將讀寫位置指向文件尾后再增加offset個 位移量。當whence值為SEEK_CUR 或SEEK_EN D時,參數offset允許負值的出現。下列是較特別的使用方式 :1) 欲將讀寫位置移動到文件開頭時:fseek(FILE *stream,0,SEEK_SET);
    2) 欲將讀寫位置移 動到文件尾時:fseek(FILE *stream,0,0S EEK_END);



    返回值
    < br>當調用成功時則返回0,若有錯誤則返回-1,errno會 存放錯誤代碼。


    附加說明
    fseek()不像lseek()會返回讀寫位置,因此必須 使用ftell()來取得目前讀寫的位置。

    l ftell()函數




    ftell(取得文件流的讀取位置)
    < br>
    相關函數

    fseek,rewi nd,fgetpos,fsetpos


    表頭文件

    #include<
    stdio .h>



    定義函數

    long ftell(FILE * stream);



    函數說明

    ftell()用 來取得文件流目前的讀寫位置。參數stream為已打開的文件指 針。


    返回值

    當調用成 功時則返回目前的讀寫位置,若有錯誤則返回-1,errno會存 放錯誤代碼。


    錯誤代碼

    EBADF 參數stream無效或可移動讀寫位置的文件流。


    范例

    參考fseek ()。

    通過fseek()、ftell()兩 個函數,我們就可以隨意訪問文件的任何位置了,想了想好像操作文 件就這么easy,實在也沒有更多可說的了。對了,fseek( )和ftell()存在一個潛在的問題就是他們限制文件的大小只 能在long類型的表示范圍以內,也就是說通過這種方式,只能打 開2,000,000,000字節的文件,不過在絕大多數情況下 似乎也已經夠用了。如果需要打開更大的文件,你需要用到fget pos()、fsetpos()函數了,那是另一個命題了。

    from: http://www.aonet.cn/artical/26/2005045581.htm

    posted on 2007-01-05 10:49 weidagang2046 閱讀(1864) 評論(0)  編輯  收藏 所屬分類: C/C++

    主站蜘蛛池模板: 久久99毛片免费观看不卡| 亚洲高清视频免费| 亚洲AV无码专区在线电影成人| 在线观看www日本免费网站| 好看的亚洲黄色经典| 国产自国产自愉自愉免费24区 | 中文无码亚洲精品字幕| 国国内清清草原免费视频99| 亚洲国产精品综合福利专区| 1000部拍拍拍18勿入免费视频软件 | 亚洲天堂中文字幕在线观看| 曰批全过程免费视频播放网站| 亚洲综合区图片小说区| 嫖丰满老熟妇AAAA片免费看| 亚洲熟女综合一区二区三区| 国产资源免费观看| 国产精品1024在线永久免费| 亚洲精品V欧洲精品V日韩精品 | 日韩国产免费一区二区三区| 天天爽亚洲中文字幕| 免费黄色小视频网站| 一区二区三区AV高清免费波多| 中文字幕第一页亚洲| 91大神在线免费观看| 亚洲午夜理论片在线观看| 四虎影视永久免费视频观看| 中文字幕免费观看视频| 亚洲色图在线观看| 在线观看免费大黄网站| 国产精品免费久久久久电影网| 亚洲国产精品免费视频| 夭天干天天做天天免费看| jzzjzz免费观看大片免费| 久久精品国产亚洲av水果派| 日韩伦理片电影在线免费观看| 国产免费伦精品一区二区三区| 亚洲国产视频一区| 亚洲免费在线观看| 一二三四在线观看免费高清中文在线观看| 国产精品亚洲精品日韩动图| 久久亚洲免费视频|