• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            13.5.2 fseek(文件定位)函數(shù)和隨機(jī)讀寫

            對(duì)流式文件可以進(jìn)行順序讀寫,也可以進(jìn)行隨機(jī)讀寫,關(guān)鍵在于控制文件的位置指針。如果位置指針是按字節(jié)位置順序移動(dòng)的,就是順序讀寫;如果能將位置指針按需要移動(dòng)到任意的位置,就可以實(shí)現(xiàn)隨機(jī)讀寫.所謂隨機(jī)讀寫,是指讀寫完上一個(gè)字符(字節(jié))后,并不一定要讀寫其后續(xù)的字符(字節(jié)),而可以讀寫文件中任意位置上所需要的字符(字節(jié))。

            用 fseek 函數(shù)可以實(shí)現(xiàn)改變文件的位置指針。

            fseek 函數(shù)的調(diào)用形式為: fseek (文件類型指針,位移量,起始點(diǎn))

            “起始點(diǎn) ”用0、1或 2 代替,0代表 “文件開始”,1 為“當(dāng)前位置”,2 為 “文件末尾”。 ANSI C 標(biāo)準(zhǔn)指定的名字如下表所示:

                    起始點(diǎn)                           名字                      用數(shù)字代表
                 文件開始                     SEEK_SET                          0
                 文件當(dāng)前位置            SEEK_ CUR                        1                                                       
                 文件末尾                     SEEK_END                         2

            “位移量”指以 “起始點(diǎn)” 為基點(diǎn),向前移動(dòng)的字節(jié)數(shù)。ANSI C 和大多數(shù)版本要求位移量是(long)長(zhǎng)整型數(shù)據(jù)。這樣當(dāng)文件的長(zhǎng)度大于64KB時(shí)不致出問題。ANSI C 標(biāo)準(zhǔn)規(guī)定在數(shù)字的末尾加一個(gè)字母 L,就表示是 long 型。

            fseek 函數(shù)一般用于二進(jìn)制文件,因?yàn)槲谋疚募l(fā)生字符轉(zhuǎn)換,計(jì)算位置時(shí)往往會(huì)發(fā)生混亂。

            下面是fseek 函數(shù)調(diào)用的幾個(gè)例子:

            fseek(fp,100L,0);/* 將位置指針移到離文件頭100個(gè)字節(jié)處 */

            fseek(fp,50L,1); /* 將位置指針移到離當(dāng)前位置50個(gè)字節(jié)處 */

            fseek(fp,--10L,2);/* 將位置指針從文件末尾處向后退 10 個(gè)字節(jié) */

            利用 fseek 函數(shù)就可以實(shí)現(xiàn)隨機(jī)讀寫了。

            例13.5 在磁盤文件上存有 10 個(gè)學(xué)生的數(shù)據(jù)。要求將第 1、3、5、7、9個(gè)學(xué)生數(shù)據(jù)輸入計(jì)算機(jī),并在屏幕上顯示出來。程序如下:

            #include "stdlib.h"
            #include "stdio.h"
            struct student_type
            {
            char name[10];
            int num;
            int age;
            char sex;
            }stud[10];
            void main()
            {
                int a;
                FILE * fp;
                if((fp=fopen("stud_dat.txt","rb"))==NULL)
                {
                printf("can not open file\n");
                exit(0);
                }
                for(a=0;a<10;a+=2)
                {
                fseek(fp,a * sizeof(struct student_type),0);
                fread(&stud[a],sizeof(struct student_type),1,fp);
                printf("%s %d %d %c\n",stud[a].name,stud[a].num,stud[a].age,stud[a].sex);
                }
                fclose(fp);
            }
            (先新建一個(gè)文本文件名為“stud_dat.txt”(可以改其它名字),然后在里面輸入10學(xué)生的數(shù)據(jù)。接著再把本程序在VC編譯系統(tǒng)中運(yùn)行……)。


                                                    13.5.3 ftell 函數(shù)

               ftell 函數(shù)的作用是得到流式文件中的當(dāng)前位置,用相對(duì)文件開頭的位移量來表示。由于文件中的位置指針經(jīng)常移動(dòng),人們往往不容易知道其當(dāng)前位置。
            用 ftell 函數(shù)可以得到當(dāng)前位置 。如果 ftell 函數(shù)返回值為--1L,表示出錯(cuò)。例如:
            a=ftell(fp);
            if(a==--1L)
            printf("error\n");

            變量 a 存放當(dāng)前位置,如調(diào)用函數(shù)時(shí)出錯(cuò)(如不存在 fp 文件),則輸出“error”。


                tell(告訴,吩咐,斷定,知道,)

             

            例13.4 有一個(gè)磁盤文件,第一次將它的內(nèi)容顯示在屏幕上,第二次把它復(fù)制

            #include "stdio.h"
            void main()
            {
            FILE * fp1,* fp2;
            fp1=fopen("file1.txt","r");
            fp2=fopen("file2.txt","w");
            while(! feof(fp1))
            putchar(getc(fp1));
            rewind(fp1);
            while(! feof(fp1))
            putc(getc(fp1),fp2);
            fclose(fp1);
            fclose(fp2);
            }

             

            例13.5 在磁盤文件上存有 10 個(gè)學(xué)生的數(shù)據(jù)。要求將第 1、3、5、7、9個(gè)學(xué)

            #include "stdlib.h"
            #include "stdio.h"
            struct student_type
            {
            char name[10];
            int num;
            int age;
            char sex;
            }stud[10];
            void main()
            {
                int a;
                FILE * fp;
                if((fp=fopen("stud_dat.txt","rb"))==NULL)
                {
                printf("can not open file\n");
                exit(0);
                }
                for(a=0;a<10;a+=2)
                {
                fseek(fp,a * sizeof(struct student_type),0);
                fread(&stud[a],sizeof(struct student_type),1,fp);
                printf("%s %d %d %c\n",stud[a].name,stud[a].num,stud[a].age,stud[a].sex);
                }
                fclose(fp);
            }

             

             

            file1(文本文檔里的內(nèi)容)

            Nu11              pointer              assignment
            (無效的) ( 指示器)(分配、任務(wù)、作業(yè))

             

            stud_dat(文本文檔里的內(nèi)容)

            Nu11              pointer              assignment
            (無效的) ( 指示器)(分配、任務(wù)、作業(yè))

            Nu11              pointer              assignment
            (無效的) ( 指示器)(分配、任務(wù)、作業(yè))

            Nu11              pointer              assignment
            (無效的) ( 指示器)(分配、任務(wù)、作業(yè))

            Nu11              pointer              assignment
            (無效的) ( 指示器)(分配、任務(wù)、作業(yè))

            Nu11              pointer              assignment
            (無效的) ( 指示器)(分配、任務(wù)、作業(yè))

             

             

            posted on 2010-08-13 08:49 wrh 閱讀(1926) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            導(dǎo)航

            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产精品综合久久第一页| 日韩精品无码久久久久久| 亚洲AV无码久久精品蜜桃| 久久只这里是精品66| 久久精品国产男包| 久久久久波多野结衣高潮| 无码人妻少妇久久中文字幕蜜桃 | 久久久久久综合一区中文字幕| 国产亚洲欧美成人久久片| 94久久国产乱子伦精品免费| 国产一区二区精品久久凹凸| 老男人久久青草av高清| 99久久精品费精品国产一区二区| 精品久久久久久无码人妻蜜桃| 亚洲日本va午夜中文字幕久久 | 久久精品国产亚洲麻豆| 99久久精品国产综合一区 | 久久只有这精品99| 18岁日韩内射颜射午夜久久成人| 九九热久久免费视频| 亚洲精品乱码久久久久久按摩| 久久国产成人午夜aⅴ影院| 久久99国产综合精品| 国产精品久久久久一区二区三区| 无遮挡粉嫩小泬久久久久久久| 久久精品不卡| 日本一区精品久久久久影院| 精品伊人久久大线蕉色首页| 日本道色综合久久影院| 国产精品久久久福利| 亚洲va久久久噜噜噜久久狠狠| 办公室久久精品| 久久成人国产精品二三区| 久久久久亚洲Av无码专| 亚洲中文字幕久久精品无码喷水 | 久久99热这里只频精品6| 狠狠综合久久综合中文88 | 精品人妻伦一二三区久久| 久久精品国产亚洲av高清漫画 | 日韩va亚洲va欧美va久久| 94久久国产乱子伦精品免费|