一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

第二十四講 文件的定位

 昵稱29398856 2016-01-21

       關(guān)于文件的操作,我們說了不少了,雖然說得不深,但是一般的應(yīng)用能夠應(yīng)付了,不過還有一點得說一下,那就是當(dāng)我們打開一個文件,我們要什么地方讀取信息呢?是要從一開始呢還是從當(dāng)前位置還是從末尾添加呢?為了解決這個問題,我們今天來探討一下文件的定位。

       大家還記得我們怎么訪問數(shù)組的嗎?如果要是我們像訪問數(shù)組內(nèi)容一樣的訪問fopen打開的文件一樣的話豈不是很方便呢?是啊,fseek這個函數(shù)就是現(xiàn)實這個功能的,我們可以通過fseek訪問文件像訪問數(shù)組一樣的方便,那么fseek是怎么工作呢?我想既然已經(jīng)提出這個問題,想必大家都一定很好奇了吧。

       為了明白一個函數(shù)的用法,我們要先明白他的原型,下面是我們在MSDN上看到的原型:

----------------------------------------

int fseek(
     FILE *stream,
     long offset,
     int origin
);
----------------------------------------

       從這個原型里面,我們可以看到這個函數(shù)需要三個參數(shù),第一個參數(shù)是FILE的指針,也就是我們打開文件fopen的返回指針。第二參數(shù)是偏移量,我們要想訪問文件像訪問數(shù)組一樣簡單就是靠這個參數(shù)。第三個參數(shù)就是讀取模式,這個參數(shù)有三種類型:

-----------------------------------------

SEEK_SET              文件開始

SEEK_CUR              當(dāng)前位置

SEEK_END              文件結(jié)尾

-------------------------------------------

       第二個參數(shù)要起作用就是靠這第三個參數(shù),第三個參數(shù)就是第二個參數(shù)偏移的原地,可以為負(fù),可以為正,當(dāng)為負(fù)的時候表示向后移,若為正表示向前移,下面我們來看下這個例子:

--------------------------------------

#include
#include
int main()
{
     char ch,name;
     FILE *file;
     long count,last;
     puts('請輸入要打開的文本文件:');
     gets(name);
     file = fopen(name1,'r');
     if(file == NULL)
               puts('打開文件失敗.');
     fseek(file,0L,SEEK_END);
     last = ftell(file);
     for(count=0L;count<>
     {
            fseek(file,-count,SEEK_END);
            ch = getc(file);
            if(ch != NULL);
                   putchar(ch)
     }
     system('PAUSE');
     return 0;
}

------------------------------------------

    我們先準(zhǔn)備一個txt文件,里面輸入如下內(nèi)容:

-------------------------------------------

//lizi.txt

#include
#include
int main()
{
     char ch[20];
     FILE *file;
     file = fopen('lizi.txt','r');
     if(file == NULL)
           printf('Open File fail.\n');
     fgets(ch,20,file);
     fputs(ch,stdout); 
     system('PAUSE');
     return 0;
}

--------------------------------------------

     然后我們再來看下輸出:

      程序反向輸出,實現(xiàn)這一功能的就是靠fseek辦到的,fseek將文件定位在文件尾部,所以從尾部一個個字符讀取,所以打印出來的是從后到前打印出來。

       大家要是注意的話里面出現(xiàn)了一個我們沒有接觸過的函數(shù),就是ftell(),這個函數(shù)正是我們今天要說的,他是配合fseek一起使用的。所以還是老規(guī)矩,我們先看看這個函數(shù)的原型:

------------------------------

long ftell(
        FILE *stream
);

-----------------------------

      這個函數(shù)返回從文件開頭到定位處的字符個數(shù),是一個long類型。所以在我們得到這個long值后  ,我們就可以用一個for循環(huán)控制輸出。

       fseek和ftell這對函數(shù)有個極限性,那就是限定文件在long范圍內(nèi),為了解決的這個問題,我們來看看另外一對函數(shù):

------------------------------------

int fgetpos (FILE * restrict stream, fpos_t * restrict pos);

int fsetpos (FILE * stream, const fpos_t *pos);

------------------------------------

     這對函數(shù)里使用了一個叫做fpos_t的類型做參數(shù),fpos_t不是什么基類型,而是通過其他類型定義的,關(guān)于fpos_t,有興趣的同學(xué)可以去查一下,我就不多說,不過一般來說,fseek和ftell就足夠了,試想2億字符的文件有多大?所以,除非是超大文件,否則,fseek就足夠了。

     C語言部分說到這里,不知道算不算差不多了,如果有什么還想要知道的,大家可以提問,如果沒什么問題,我想我們是不是可以開始嘗試一下簡單的windows編程呢?至于C++,我們打算在說完window編程再說。不過還是看大家的意見。

====================

回復(fù)D&d直接查看目錄

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    久热久热精品视频在线观看 | 日韩欧美综合在线播放| 久久99青青精品免费| 激情综合网俺也狠狠地| 五月婷婷亚洲综合一区| 中文字幕一区二区久久综合| 欧美日韩三区在线观看| 欧美一区二区三区在线播放| 色无极东京热男人的天堂| 国产成人精品在线播放| 欧美日韩一区二区午夜| 黄色国产精品一区二区三区| 精品久久av一二三区| 日韩精品中文字幕在线视频| 欧美成人黄色一级视频| 国产精品色热综合在线| 国产精品色热综合在线| 五月婷婷综合缴情六月| 日韩中文字幕有码午夜美女| 91香蕉国产观看免费人人| 色偷偷亚洲女人天堂观看| 日韩欧美中文字幕av| 麻豆蜜桃星空传媒在线观看| 中文字幕人妻av不卡| 精品人妻一区二区三区四区久久 | 国产一区二区三区av在线| 色婷婷在线精品国自产拍| 久热这里只有精品九九| 老司机这里只有精品视频| 日韩精品一区二区不卡| 不卡一区二区在线视频| 亚洲精品国产第一区二区多人| 亚洲欧洲在线一区二区三区| 少妇淫真视频一区二区| 老外那个很粗大做起来很爽| 精品欧美一区二区三久久| 午夜精品黄片在线播放| 91蜜臀精品一区二区三区| 日韩中文无线码在线视频| 精品欧美一区二区三久久| 亚洲熟妇中文字幕五十路|