• <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>

            文件模式

             

            文件

            C程序,將文件看做是連續(xù)字節(jié)序列,其中每個字節(jié)都可以單獨讀取.這個與UNIX環(huán)境中的文件結(jié)構(gòu)是一致的.ANSI C為了與其他的OS環(huán)境兼容(比如Windows),提供了兩種文件視圖: 文本視圖和二進制視圖.

            文本視圖和二進制視圖

            二進制視圖中,文件中的每個字節(jié)都可以為程序訪問.但文本視圖中,程序中看到的內(nèi)容與文件的內(nèi)容可能不同.

            例如MS-DOS文本文件用"\r\n"來表示行尾; Macintosh文本文件中用"\r"表示行尾; C程序使用"\n"表示行尾. So,如果C程序以文本視圖模式處理一個MS-DOS文本文件,在讀取文件時,就會將"\r\n"轉(zhuǎn)換為"\n",在寫入文件時,就會將"\n"轉(zhuǎn)換為"\r\n". Macintosh同理.

            說白了,兩種視圖的實現(xiàn)是一樣的,只是在處理行尾或處理文件結(jié)尾時有點不同而已.采用某種視圖打開文件時,注意一下就是了.

            文件結(jié)尾和換行

            文件讀取數(shù)據(jù)的程序需要在達到文件結(jié)尾時停止.當?shù)竭_文件結(jié)尾時,"getc()"函數(shù)會返回一個特殊值EOF.所以C程序只有在讀取超出文件結(jié)尾后,才會發(fā)現(xiàn)文件的結(jié)尾.

            為了避免讀取空文件帶來的問題,應(yīng)該對文件輸入使用入口條件循環(huán)(使用whilefor,避免使用do...while)如下設(shè)計:

            int ch;      // Watching EOF
            FILE* fp;
            fp = fopen ("_FileName", "_Mode");
            ch = getc (fp);
             
            while (ch != EOF)
            {
                putchar (ch);
                ch = getc (fp);
            }

            上面的例子可以看做是一個框架,來進行文件結(jié)尾的判斷.ANSI C的兩種模式,對于文件結(jié)尾有不同的解釋.

            如果文件以文本模式打開,C可以認出EOF標志文件結(jié)尾.如果以二進制模式打開,就會把EOF當做是文件中的一個字符.真正的文件結(jié)尾還在后面.文件的結(jié)尾,可能緊跟著EOF,當然,也可能用空字符填充文件使其大小為256(或其他數(shù))的倍數(shù).DOS下不打印空字符.程序中包含了防止程序打印EOF字符的代碼.

            MS-DOS的文本文件用二進制模式和文本模式打開,C程序?qū)⒖吹较旅娴膬?nèi)容:

            二進制模式打開文件C程序看到的內(nèi)容:

            line1\r\n

            line2\r\n

            line3\r\n

            ^Z

            文本模式打開文件C程序看到的內(nèi)容:

            line1\n

            line2\n

            line3\n

            ^Z

            例子 : 逆序輸出一個文件內(nèi)容

            #include <stdio.h>
            #include <stdlib.h>
            #define MAC
            #define CNTL_Z '\032' /* DOS Text File End Of File Flag */
            #define SLEN   50
            #define PATH  
            int main (void)
            {
                unsigned char file[SLEN];
                unsigned char ch;
                FILE*         fp;
                unsigned long count;
                unsigned long last;
                puts ("Enter Name Of File To Be Processed : ");
                gets (file);
                if ((fp = fopen (file, "rb")) == NULL)
                {
                    printf ("Reverse Can't Open %s .\n", file);
                    exit (1);
                }
                fseek (fp, 0L, SEEK_END);   /* Locate To End Of File */
                last = ftell (fp);
                for (count = 1L; count <= last; count++)
                {
                    fseek (fp, -count, SEEK_END);  /* Back 1 Byte */
                    ch = getc (fp);
                    if (ch != CNTL_Z && ch != '\r')
                    {
                        putchar (ch);
                    }
            #if defined MAC || defined WIN32
                    /* Macintosh || Windows */
                    if (ch == '\r')
                    {
                        putchar ('\n');
                    }
                    else
                    {
                        putchar (ch);
                    }
            #endif
                    putchar ('\n');
                    fclose (fp);
                    return 0;
                }
            }




            posted on 2012-10-31 16:40 Apollo Fang 閱讀(280) 評論(0)  編輯 收藏 引用 所屬分類: C/C++


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


            導(dǎo)航

            隨筆分類

            隨筆檔案

            最新評論

            久久无码人妻一区二区三区午夜| 国产成人综合久久综合| 久久久久久久久66精品片| 成人午夜精品无码区久久| 97久久精品国产精品青草| 日韩AV毛片精品久久久| 亚洲精品tv久久久久久久久| 色综合久久久久网| 无码人妻久久一区二区三区| segui久久国产精品| 色综合久久无码五十路人妻| 亚洲国产成人精品女人久久久 | 欧美黑人激情性久久| 精品久久人人妻人人做精品| 久久久久女人精品毛片| 亚洲国产成人久久笫一页| 99国内精品久久久久久久| 久久久噜噜噜www成人网| 日产精品久久久久久久| 国产精品99久久99久久久| 亚洲国产精品一区二区久久| 无遮挡粉嫩小泬久久久久久久| 久久午夜综合久久| 国产精品久久久久久久午夜片| 精品乱码久久久久久久| 久久精品国产亚洲AV电影| 热re99久久6国产精品免费| 中文字幕久久久久人妻| 人妻无码精品久久亚瑟影视| 天天做夜夜做久久做狠狠| 久久亚洲视频| 午夜视频久久久久一区 | 久久久久久精品无码人妻| 一本大道久久香蕉成人网| 色偷偷88欧美精品久久久| 久久人人爽人人爽人人片AV东京热| 99久久精品九九亚洲精品| 精品乱码久久久久久夜夜嗨 | 久久只有这里有精品4| 久久精品国产清自在天天线 | 一级A毛片免费观看久久精品|