程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++文件的打開與關閉

C++文件的打開與關閉

編輯:C++基礎知識
這裡講一下如何打開和關閉磁盤上的文件,其他外設(U盤、光盤等)上的文件與此相同。

打開文件

所謂打開(open)文件是一種形象的說法,如同打開房門就可以進入房間活動一樣。 打開文件是指在文件讀寫之前做必要的准備工作,包括:
  • 為文件流對象和指定的磁盤文件建立關聯,以便使文件流流向指定的磁盤文件。
  • 指定文件的工作方式,如,該文件是作為輸入文件還是輸出文件,是ASCII文件還是二進制文件等。

以上工作可以通過兩種不同的方法實現。

1) 調用文件流的成員函數open。
    ofstream outfile;  //定義ofstream類(輸出文件流類)對象outfile
    outfile.open("f1.dat",ios::out);  //使文件流與f1.dat文件建立關聯
第2行是調用輸出文件流的成員函數open打開磁盤文件f1.dat,並指定它為輸出文件, 文件流對象outfile將向磁盤文件f1.dat輸出數據。ios::out是I/O模式的一種,表示以輸出方式打開一個文件。或者簡單地說,此時f1.dat是一個輸出文件,接收從內存輸出的數據。

調用成員函數open的一般形式為:
    文件流對象.open(磁盤文件名, 輸入輸出方式);
磁盤文件名可以包括路徑,如"c:\new\\f1.dat",如缺省路徑,則默認為當前目錄下的文件。

2) 在定義文件流對象時指定參數
在聲明文件流類時定義了帶參數的構造函數,其中包含了打開磁盤文件的功能。因此,可以在定義文件流對象時指定參數,調用文件流類的構造函數來實現打開文件的功能。如
    ostream outfile("f1.dat",ios::out);
一般多用此形式,比較方便。作用與open函數相同。

輸入輸出方式是在ios類中定義的,它們是枚舉常量,有多種選擇,見表13.6。
表13.6 文件輸入輸出方式設置值 方 式 作用 ios::in 以輸入方式打開文件 ios::out 以輸出方式打開文件(這是默認方式),如果已有此名字的文件,則將其原有內容全部清除 ios::app 以輸出方式打開文件,寫入的數據添加在文件末尾 ios::ate 打開一個已有的文件,文件指針指向文件末尾 ios: :trunc 打開一個文件,如果文件已存在,則刪除其中全部數據,如文件不存在,則建立新文件。如已指定了 ios::out 方式,而未指定ios: :app,ios::ate,ios: :in,則同時默認此方式 ios:: binary 以二進制方式打開一個文件,如不指定此方式則默認為ASCII方式 ios::nocreate 打開一個已有的文件,如文件不存在,則打開失敗。nocrcate的意思是不建立新文件 ios:: noreplace 如果文件不存在則建立新文件,如果文件已存在則操作失敗,replace 的意思是不更新原有文件 ios::in l ios::out 以輸入和輸出方式打開文件,文件可讀可寫 ios:: out | ios::binary 以二進制方式打開一個輸出文件 ios::in l ios::binar 以二進制方式打開一個輸入文件
幾點說明:
1) 新版本的I/O類庫中不提供ios::nocreate和ios::noreplace。

2) 每一個打開的文件都有一個文件指針,該指針的初始位置由I/O方式指定,每次讀寫都從文件指針的當前位置開始。每讀入一個字節,指針就後移一個字節。當文件指針移到最後,就會遇到文件結束EOF(文件結束符也占一個字節,其值為-1),此時流對象的成員函數eof的值為非0值(一般設為1),表示文件結束了。

3) 可以用“位或”運算符“|”對輸入輸出方式進行組合,如表13.6中最後3行所示那樣。還可以舉出下面一些例子:
    ios::in | ios:: noreplace  //打開一個輸入文件,若文件不存在則返回打開失敗的信息
    ios::app | ios::nocreate  //打開一個輸出文件,在文件尾接著寫數據,若文件不存在,則返回打開失敗的信息
    ios::out l ios::noreplace  //打開一個新文件作為輸出文件,如果文件已存在則返回打開失敗的信息
    ios::in l ios::out I ios::binary  //打開一個二進制文件,可讀可寫

但不能組合互相排斥的方式,如 ios::nocreate l ios::noreplace。

4) 如果打開操作失敗,open函數的返回值為0(假),如果是用調用構造函數的方式打開文件的,則流對象的值為0。可以據此測試打開是否成功。如
    if(outfile.open("f1.bat", ios::app) ==0)
        cout <<"open error";

    if( !outfile.open("f1.bat", ios::app) )
        cout <<"open error";

關閉磁盤文件

在對已打開的磁盤文件的讀寫操作完成後,應關閉該文件。關閉文件用成員函數close。如
    outfile.close( );  //將輸出文件流所關聯的磁盤文件關閉
所謂關閉,實際上是解除該磁盤文件與文件流的關聯,原來設置的工作方式也失效,這樣,就不能再通過文件流對該文件進行輸入或輸出。此時可以將文件流與其他磁盤文件建立關聯,通過文件流對新的文件進行輸入或輸出。如
    outfile.open("f2.dat",ios::app|ios::nocreate);
此時文件流outfile與f2.dat建立關聯,並指定了f2.dat的工作方式。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved