小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

第二十二講 文件的讀取

 昵稱29398856 2016-01-21

        今天我們要說的是文件的操作,一直在黑乎乎的控制臺上操作想必大家都厭煩了,心想是不是可以把信息寫在txt等文件里面呢?當然是可以的,接下來我們就說說文件的讀寫。

        大家還記得我們在開始說gets()這個函數(shù)的時候我們順便便說了一個fgets()嗎?當時我們說這個函數(shù)是gets的文件版本,而且是一個安全版本,當時我們沒有細說,留待以后再說,今天該是我們說這個函數(shù)的時候了,不過在說這個函數(shù)之前,我們先來看看fopen()。

        fopen()顧名思義就是open file的意思,他是以文件名為參數(shù),同時返回一個指向文件結(jié)構(gòu)的指針。例如我們要是想要打開一個名為“l(fā)izi.txt”的文件,我們以讀寫模式來打開。

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

FILE * fp;

fp = fopen('lizi.txt','r|w');

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

      通常情況下,我們要判斷我們要開打的文件是否被打開,如果打開,fopen便是指向FILE的指針,如果打開失敗,便返回一個空指針。

      還記得我們的fgets()函數(shù)的原型嗎?他的第三個參數(shù)就是一個FILE的指針,所以當?shù)玫竭@個指針之后,我們便可以將該指針傳遞給fgets,然后就能夠讀取該打開文件的內(nèi)容了。

        和fgets匹配的便是fputs,我們可以將這個fgets讀取的字符串通過fputs輸出,可以在標準框里輸入,也可以把他輸入指定的文件之中。我們來看看下面的這個例子:

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

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

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

     我們在該程序的文件里建發(fā)文本文檔,然后命名為“l(fā)izi',然后在里面輸入Hello world。然后我們運行程序,可以看到標準輸出Hello world。大家如果有興趣,可以嘗試一下其他的。

     大家嘗試過之后可能會問,為什么只能讀取第一行呢?是啊,問題出在那里呢?我們再來看看fgets()這個函數(shù)吧。

     fgets()他可以讀取一連串的字符串,但是會在碰到回車后停止讀取,所以他讀取我們的第一行。那么有沒有辦法讓把整個文件讀完呢?答案是肯定的,我們可以通過使用一個循環(huán)來完成,但是大家是不是又想問,用循環(huán)的話那怎么控制循環(huán)呢?

      每個文件都有一個結(jié)尾符,便是End Of File,在C/C++里,我們稱它為EOF,而fgets同樣不例外,在遇到eof之后便不會再讀取了,所以我們便利用這一點來控制這個循環(huán)。又由于fgets()返回一個指向char的指針,這將和eof類型不同,在這里我們不能強制轉(zhuǎn)換,如果你要是轉(zhuǎn)換,那就是出大事了,既然不能轉(zhuǎn)換的話該怎么辦呢?我們可以這么想,如果fgets()沒東西可以讀取,那么返回的豈不是NULL指針嗎?所以我們將程序這么改一下:

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

#include
#include
int main()
{
     char ch[20];
     FILE *file;
     file = fopen('lizi.txt','r');
     if(file == NULL)
             printf('打開文件失敗.\n');
      while(fgets(ch,20,file) != NULL)
             fputs(ch,stdout); 
      system('PAUSE');
      return 0;
}

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

      我們這樣一修改,就能夠讀取所有的內(nèi)容了。

      那么,我們要怎么才能將文件寫入另一個文件呢?大家還記得fputs()的第二參數(shù)是什么嗎?

      fputs的第二個參數(shù)便是FILE的指針,所以我們可以創(chuàng)建一個文本文件,然后把指向他的指針傳遞給fputs(),便可以把文件信息寫入該文本。怎么獲得這個指針呢?我們依然可以用fopen()這個函數(shù)來獲得該指針。

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

FILE *file2;

file2 = fopen('write','w');

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

      fopen的第二個參數(shù)現(xiàn)在是w,這個w的意義是打開一個文件用來進行更新寫操作,第一個參數(shù)是要打開的文件名,當然如果不存在該文件的話,便會創(chuàng)建該文件。所以如果要想把文件從一個文本寫入另一個文本之中,我們可以把上面的代碼修改一下即可,如下:

 

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

#include
#include
int main()
{
     char ch[20];
     FILE *file;

     FILE* file2;
     file = fopen('lizi.txt','r');

     file2 = fopen('write.txt','w');
     if(file == NULL)
             printf('打開文件失敗.\n');
      while(fgets(ch,20,file) != NULL)
             fputs(ch,file2); 
      system('PAUSE');
      return 0;
}

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

      再次運行便會發(fā)現(xiàn)在我們的目錄下多了一個名叫write的文本文件,打開看一下會發(fā)現(xiàn)里面的內(nèi)容和我們原文件相同。

      說到此處,那么我們怎么才能運行期打開一個文本文件呢?為了更好的說明這種使用法,我們來看下面的例子:

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

#include
#include
int main()
{
     char ch[20],name1[20],name2[20];
     FILE *file;

     FILE* file2;

     puts('請輸入要打開的文本文件:');

     gets(name1);
     puts('請輸入要寫入的文件名:');
     gets(name2);

     file = fopen(name1,'r');

     file2 = fopen(name2,'w');
     if(file == NULL)
             puts('打開文件失敗.');
      while(fgets(ch,20,file) != NULL)
             fputs(ch,file2); 
      system('PAUSE');
      return 0;
}

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

     在輸入文件名時記得帶上路徑,比如說如果我們想要打開一個D盤下面的文件,我們可以這么寫:

D:\\lizi.txt

      注意到了嗎?我們這里用了兩個\\,還記得我們以前的那些轉(zhuǎn)義符嗎?很多都是要添加一個\,我們用得最多的就是換行了\n,所以如果我們想要獲取一個\,那么就要輸入兩個\\。同樣對于我們的目標文件,同樣還要這么寫,不過不添加地址,就會自動在我們的程序目錄生成這個文件。

       關(guān)于文件的讀取,今天就說到這里吧,下面還有幾個函數(shù)呢,我在想是要大家去自己研究呢還是我拿出來說一下呢?我先想想吧。

 

    

 

 

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

回復D&d直接查看目錄

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多