IO流讀寫文件和串行化課件_第1頁
IO流讀寫文件和串行化課件_第2頁
IO流讀寫文件和串行化課件_第3頁
IO流讀寫文件和串行化課件_第4頁
IO流讀寫文件和串行化課件_第5頁
已閱讀5頁,還剩39頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

I/O流、讀寫文件

和串行化I/O流、讀寫文件

和串行化《面向對象技術與VisualC++》--第7章2主要內容流的概念非格式化輸入/輸出格式化輸入/輸出C++中對文件的操作MFC中提供的對文件操作的類文檔類中的操作圖形的保存《面向對象技術與VisualC++》--第7章2主要內容流《面向對象技術與VisualC++》--第7章3流的概念

所謂“流”,是從源(source)到矢(sink)的數據流的一個抽象。流動的方向不同,構成輸入/輸出流,即I/O流。數據可以從文件流入到程序,也可以從程序流向文件。鍵盤、屏幕、打印機和通信端口都可看作是擴充文件。從流中獲取數據的操作稱為提取操作向流中添加數據的操作稱為插入操作。數據的輸入/輸出就是通過I/O流來實現的?!睹嫦驅ο蠹夹g與VisualC++》--第7章3流的概念《面向對象技術與VisualC++》--第7章4I/O流類庫預定義了4個流類對象cin處理標準輸入cout處理標準輸出cerr處理標準錯誤輸出(非緩沖方式)clog處理標準錯誤輸出(緩沖方式)ostream類istream類流的概念

《面向對象技術與VisualC++》--第7章4I/O流類《面向對象技術與VisualC++》--第7章5非格式化輸入/輸出

定義:按系統預定義的格式進行的輸入/輸出。如何實現:cin用來處理標準輸入,即鍵盤輸入;cout用來處理標準輸出,即屏幕輸出。它們被定義在iostream.h頭文件中。在使用cout和cin前,要用編譯預處理命令將所使用的頭文件包含到源程序中,其格式如下:#include<iostream.h>《面向對象技術與VisualC++》--第7章5非格式化輸《面向對象技術與VisualC++》--第7章6非格式化輸出

使用cout的格式如下:

cout<<E1<<E2<<…<<Em;

其中,E1、E2、…、Em為均為表達式。功能是計算各表達式的值,并將結果輸出到屏幕當前光標位置處。插入符(<<)重載

如果要輸出的是非基本數據類型,應當如何?必須自定義運算符重載函數。《面向對象技術與VisualC++》--第7章6非格式化輸《面向對象技術與VisualC++》--第7章7非格式化輸入

使用cin的格式如下:

cin>>V1>>V2>>…>>Vn;

其中,V1、V2、…、Vn都是變量。功能:暫停執行程序,等待用戶從鍵盤輸入數據,各數據間用空格或Tab鍵分隔,輸入數據類型要與接受變量類型一致,輸完后,按回車鍵結束。提取符(>>)重載《面向對象技術與VisualC++》--第7章7非格式化輸《面向對象技術與VisualC++》--第7章8格式化輸入/輸出

定義:按特定的格式進行輸入/輸出。例如,設定輸出寬度、輸出精度等。C++提供了兩種進行輸入/輸出格式化的方法:用ios類成員函數進行格式化。用專門的操作符函數進行格式化。《面向對象技術與VisualC++》--第7章8格式化輸入《面向對象技術與VisualC++》--第7章9

文件的輸入/輸出

根據數據的組織形式,可分為文本文件和二進制文件。C++有三種文件流類:

ifstream

從istream派生提供文件輸入操作

ofstream

從ostream派生提供文件輸出操作

fstream

從iostream派生提供文件輸入/輸出雙向操作這些文件流類都定義在fstream.h頭文件中《面向對象技術與VisualC++》--第7章9文件的輸《面向對象技術與VisualC++》--第7章10文件操作的一般步驟

為文件定義一個流類對象;使用成員函數open()打開文件;進行讀寫操作。即輸入/輸出操作;使用成員函數close()關閉文件?!睹嫦驅ο蠹夹g與VisualC++》--第7章10文件操作《面向對象技術與VisualC++》--第7章11MFC中提供的對文件操作的類CFile類構造函數、Write、ReadCArchive類可將一個復雜的對象以二進制形式永久保存到硬盤中,以后可再從永久存儲中加載數據。這一過程稱“串行化”。構造函數、>>和<<文檔類中的操作

Serialize:當打開文件或保存文件時,會調用該函數?!睹嫦驅ο蠹夹g與VisualC++》--第7章11MFC中《面向對象技術與VisualC++》--第7章12圖形的保存生成一個可串行化的類讓你的類從CObject派生覆蓋Serialize成員函數在類聲明中使用Declare_Serial宏定義一個不帶參的構造函數在類實現文件中使用IMPLEMENT_SERIAL宏?!睹嫦驅ο蠹夹g與VisualC++》--第7章12圖形的?!睹嫦驅ο蠹夹g與VisualC++》--第7章13圖形的保存由文檔類暫存圖形數據改寫文檔類的Serialize函數堆上分配的內存釋放在DeleteContents中釋放?!睹嫦驅ο蠹夹g與VisualC++》--第7章13圖形的?!睹嫦驅ο蠹夹g與VisualC++》--第7章14StringTable中IDR_MAINFRAME字符串資源中各子串的含義(1)CDocTemplate::windowTitle,主窗口標題欄上的字符串,MDI程序不需要指定,將以IDR_MAINFRAME字符串為默認值。(2)CDocTemplate::docName,缺省文檔的名稱。如果沒有指定,缺省文檔的名稱是無標題。(3)CDocTemplate::fileNewName,文檔類型的名稱。如果應用程序支持多種類型的文檔,此字符串將顯示在"File/New"對話框中。如果沒有指定,就不能夠在"File/New"對話框處理這種文件?!睹嫦驅ο蠹夹g與VisualC++》--第7章14Stri《面向對象技術與VisualC++》--第7章15StringTable中IDR_MAINFRAME字符串資源中各子串的含義(4)CDocTemplate::filterName,文檔類型的描述和一個適用于此類型的通配符過濾器。這個字符串將出現在“File/Open”對話框中的文件類型列表框中。要和CDocTemplate::filterExt一起使用。(5)CDocTemplate::filterExt,文檔的擴展名。如果沒有指定,就不能夠在“File/Open”對話框中處理這種文檔。要和CDocTemplate::filterName一起使用。(6)CDocTemplate::regFileTypeId,如果你以::RegisterShellFileTypes向系統的注冊表注冊文件類型,此值會出現在HEY_CLASSES_ROOT之下成為其子項,并僅供Windows內部使用。如果沒有指定,這種文件類型就無法注冊。(7)CDocTemplate::regFileTypeName,這也是存儲在注冊表中的文件類型名稱。它會顯示于程序中用以訪問注冊表的對話框內。《面向對象技術與VisualC++》--第7章15Stri《面向對象技術與VisualC++》--第7章16在C++中,打開一個文件就是將此文件與一個流建立關聯;關閉一個文件就是取消這種關聯。open()函數的原型為:voidopen(char*filename,intmode,intaccess);

說明:第一個參數是文件名,可包含路徑;第二個參數的值決定文件的使用方式,見表7-4;第三個參數的值決定文件的訪問方式。表7-5。

mode有缺省值:對類ifstream是ios::in;對ofstream是ios::outaccess的缺省值為0(一般文件)打開文件

《面向對象技術與VisualC++》--第7章16在C++《面向對象技術與VisualC++》--第7章17關閉文件的一般格式如下:

<流類對象>.close();

說明:close()不帶任何參數,也沒有返回值。其功能是:使流對象和文件脫離關聯。也可以通過流類的析構函數實現同樣功能。但通常,操作完成時應馬上關閉文件,以免誤操作。關閉文件

《面向對象技術與VisualC++》--第7章17關閉文件《面向對象技術與VisualC++》--第7章18#include<iostream.h>classthree_d{ intx,y,z;public: three_d(inta,intb,intc){x=a;y=b;z=c;}

friendostream&operator<<(ostream&stream,three_dobj);};ostream&operator<<(ostream&stream,three_dobj){ stream<<obj.x<<","; stream<<obj.y<<","; stream<<obj.z<<"\n"; returnstream;}voidmain(){ three_da(1,2,3),b(3,4,5),c(5,6,7); cout<<a<<b<<c;}《面向對象技術與VisualC++》--第7章18#inc《面向對象技術與VisualC++》--第7章19#include<iostream.h>voidmain(){ inti; i=cout.width();//返回當前的輸出寬度,默認為0 cout<<"width:"<<i<<endl; cout.width(8);//設置輸出寬度為8 cout<<cout.width()<<"(newwidth)"<<endl;}《面向對象技術與VisualC++》--第7章19#inc《面向對象技術與VisualC++》--第7章20#include<iostream.h>#include<iomanip.h>voidmain(){char*p="12345",*q="678";charf[10],g[10]; inti=10; cout<<p<<setw(6)<<q<<setw(4)<<p<<q<<endl;//設置輸出寬度

cin>>setw(4)>>f>>g;//設置輸入寬度

cout<<f<<endl<<g<<endl<<"i:"<<i<<endl;}《面向對象技術與VisualC++》--第7章20#inc《面向對象技術與VisualC++》--第7章21ofstreamout;//定義輸出流類對象out.open(“test”,ios::out,0);//也可簡寫為out.open(“test”);ifstreamin;//定義輸入流類對象in.open(“test”,ios::in,0);//也可簡寫為in.open(“test”);fstreammystream;//定義輸入/輸出流類對象mystream.open(“test”,ios::in|ios::out,0);說明:1、如果打開失敗,則流類對象的值為0。因此使用文件前,先測試一下是否打開成功。2、ifstream、ofstream和fstream類都有構造函數,與open()函數具有相同的參數和缺省值,因此,也可調用構造函數來打開文件。如:ifstreammystream(“myfile”);ofstreammystream(“myfile”);《面向對象技術與VisualC++》--第7章21ofst《面向對象技術與VisualC++》--第7章22#include<fstream.h>voidmain(){ ofstreamostrm;

//定義流類對象

ostrm.open("f1.dat");//打開文件

ostrm<<120<<endl;//寫操作

ostrm<<310.85<<endl; ostrm.close();//關閉文件

ifstreamistrm("f1.dat");//定義流類對象

intn; doubled; istrm>>n>>d;//讀操作

cout<<n<<","<<d<<endl; istrm.close();//關閉文件}《面向對象技術與VisualC++》--第7章22#incI/O流、讀寫文件

和串行化I/O流、讀寫文件

和串行化《面向對象技術與VisualC++》--第7章24主要內容流的概念非格式化輸入/輸出格式化輸入/輸出C++中對文件的操作MFC中提供的對文件操作的類文檔類中的操作圖形的保存《面向對象技術與VisualC++》--第7章2主要內容流《面向對象技術與VisualC++》--第7章25流的概念

所謂“流”,是從源(source)到矢(sink)的數據流的一個抽象。流動的方向不同,構成輸入/輸出流,即I/O流。數據可以從文件流入到程序,也可以從程序流向文件。鍵盤、屏幕、打印機和通信端口都可看作是擴充文件。從流中獲取數據的操作稱為提取操作向流中添加數據的操作稱為插入操作。數據的輸入/輸出就是通過I/O流來實現的。《面向對象技術與VisualC++》--第7章3流的概念《面向對象技術與VisualC++》--第7章26I/O流類庫預定義了4個流類對象cin處理標準輸入cout處理標準輸出cerr處理標準錯誤輸出(非緩沖方式)clog處理標準錯誤輸出(緩沖方式)ostream類istream類流的概念

《面向對象技術與VisualC++》--第7章4I/O流類《面向對象技術與VisualC++》--第7章27非格式化輸入/輸出

定義:按系統預定義的格式進行的輸入/輸出。如何實現:cin用來處理標準輸入,即鍵盤輸入;cout用來處理標準輸出,即屏幕輸出。它們被定義在iostream.h頭文件中。在使用cout和cin前,要用編譯預處理命令將所使用的頭文件包含到源程序中,其格式如下:#include<iostream.h>《面向對象技術與VisualC++》--第7章5非格式化輸《面向對象技術與VisualC++》--第7章28非格式化輸出

使用cout的格式如下:

cout<<E1<<E2<<…<<Em;

其中,E1、E2、…、Em為均為表達式。功能是計算各表達式的值,并將結果輸出到屏幕當前光標位置處。插入符(<<)重載

如果要輸出的是非基本數據類型,應當如何?必須自定義運算符重載函數。《面向對象技術與VisualC++》--第7章6非格式化輸《面向對象技術與VisualC++》--第7章29非格式化輸入

使用cin的格式如下:

cin>>V1>>V2>>…>>Vn;

其中,V1、V2、…、Vn都是變量。功能:暫停執行程序,等待用戶從鍵盤輸入數據,各數據間用空格或Tab鍵分隔,輸入數據類型要與接受變量類型一致,輸完后,按回車鍵結束。提取符(>>)重載《面向對象技術與VisualC++》--第7章7非格式化輸《面向對象技術與VisualC++》--第7章30格式化輸入/輸出

定義:按特定的格式進行輸入/輸出。例如,設定輸出寬度、輸出精度等。C++提供了兩種進行輸入/輸出格式化的方法:用ios類成員函數進行格式化。用專門的操作符函數進行格式化。《面向對象技術與VisualC++》--第7章8格式化輸入《面向對象技術與VisualC++》--第7章31

文件的輸入/輸出

根據數據的組織形式,可分為文本文件和二進制文件。C++有三種文件流類:

ifstream

從istream派生提供文件輸入操作

ofstream

從ostream派生提供文件輸出操作

fstream

從iostream派生提供文件輸入/輸出雙向操作這些文件流類都定義在fstream.h頭文件中《面向對象技術與VisualC++》--第7章9文件的輸《面向對象技術與VisualC++》--第7章32文件操作的一般步驟

為文件定義一個流類對象;使用成員函數open()打開文件;進行讀寫操作。即輸入/輸出操作;使用成員函數close()關閉文件?!睹嫦驅ο蠹夹g與VisualC++》--第7章10文件操作《面向對象技術與VisualC++》--第7章33MFC中提供的對文件操作的類CFile類構造函數、Write、ReadCArchive類可將一個復雜的對象以二進制形式永久保存到硬盤中,以后可再從永久存儲中加載數據。這一過程稱“串行化”。構造函數、>>和<<文檔類中的操作

Serialize:當打開文件或保存文件時,會調用該函數?!睹嫦驅ο蠹夹g與VisualC++》--第7章11MFC中《面向對象技術與VisualC++》--第7章34圖形的保存生成一個可串行化的類讓你的類從CObject派生覆蓋Serialize成員函數在類聲明中使用Declare_Serial宏定義一個不帶參的構造函數在類實現文件中使用IMPLEMENT_SERIAL宏?!睹嫦驅ο蠹夹g與VisualC++》--第7章12圖形的保《面向對象技術與VisualC++》--第7章35圖形的保存由文檔類暫存圖形數據改寫文檔類的Serialize函數堆上分配的內存釋放在DeleteContents中釋放?!睹嫦驅ο蠹夹g與VisualC++》--第7章13圖形的?!睹嫦驅ο蠹夹g與VisualC++》--第7章36StringTable中IDR_MAINFRAME字符串資源中各子串的含義(1)CDocTemplate::windowTitle,主窗口標題欄上的字符串,MDI程序不需要指定,將以IDR_MAINFRAME字符串為默認值。(2)CDocTemplate::docName,缺省文檔的名稱。如果沒有指定,缺省文檔的名稱是無標題。(3)CDocTemplate::fileNewName,文檔類型的名稱。如果應用程序支持多種類型的文檔,此字符串將顯示在"File/New"對話框中。如果沒有指定,就不能夠在"File/New"對話框處理這種文件?!睹嫦驅ο蠹夹g與VisualC++》--第7章14Stri《面向對象技術與VisualC++》--第7章37StringTable中IDR_MAINFRAME字符串資源中各子串的含義(4)CDocTemplate::filterName,文檔類型的描述和一個適用于此類型的通配符過濾器。這個字符串將出現在“File/Open”對話框中的文件類型列表框中。要和CDocTemplate::filterExt一起使用。(5)CDocTemplate::filterExt,文檔的擴展名。如果沒有指定,就不能夠在“File/Open”對話框中處理這種文檔。要和CDocTemplate::filterName一起使用。(6)CDocTemplate::regFileTypeId,如果你以::RegisterShellFileTypes向系統的注冊表注冊文件類型,此值會出現在HEY_CLASSES_ROOT之下成為其子項,并僅供Windows內部使用。如果沒有指定,這種文件類型就無法注冊。(7)CDocTemplate::regFileTypeName,這也是存儲在注冊表中的文件類型名稱。它會顯示于程序中用以訪問注冊表的對話框內?!睹嫦驅ο蠹夹g與VisualC++》--第7章15Stri《面向對象技術與VisualC++》--第7章38在C++中,打開一個文件就是將此文件與一個流建立關聯;關閉一個文件就是取消這種關聯。open()函數的原型為:voidopen(char*filename,intmode,intaccess);

說明:第一個參數是文件名,可包含路徑;第二個參數的值決定文件的使用方式,見表7-4;第三個參數的值決定文件的訪問方式。表7-5。

mode有缺省值:對類ifstream是ios::in;對ofstream是ios::outaccess的缺省值為0(一般文件)打開文件

《面向對象技術與VisualC++》--第7章16在C++《面向對象技術與VisualC++》--第7章39關閉文件的一般格式如下:

<流類對象>.close();

說明:close()不帶任何參數,也沒有返回值。其功能是:使流對象和文件脫離關聯。也可以通過流類的析構函數實現同樣功能。但通常,操作完成時應馬上關閉文件,以免誤操作。關閉文件

《面向對象技術與VisualC++》--第7章17關閉文件《面向對象技術與VisualC++》--第7章40#include<iostream.h>classthree_d{ intx,y,z;public: three_d(inta,intb,intc){x=a;y=b;z=c;}

friendostream&operator<<(ostream&stream,three_dobj);};ostream&operator<<(ostream&stream,three_dobj){ stream<<obj.x<<","; stream<<obj.y<<","; stream<<obj.z<<"\n"; returnstream;}voidmain(){ three_da(1,2,3),b(3,4,5),c(5,6,7); cout<<a<<b<<c;}《面向對象技術與VisualC++》--第7章18#inc《面向對象技術與VisualC++》--第7章41#include<iostream.h>voidmain(){ inti; i=cout.width();//返回當前的輸出寬度,默認為0 cout<<"width:"<<i<<endl; cout.width(8);//設置輸出寬度為8 cout<<cout.width()<<"(newwidth)"<<endl;}《面向對象技術與VisualC++》--第7章19#inc《面向對象技術與VisualC++》--第7章42#include<iostream.h>#include<iomanip.h>voidmain(){char*p="12345",*q="678";charf[10],g[10];

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論