文件的基本概念模板課件_第1頁
文件的基本概念模板課件_第2頁
文件的基本概念模板課件_第3頁
文件的基本概念模板課件_第4頁
文件的基本概念模板課件_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

FileProcessing

Chapter17FileProcessingChapter17文件的基本概念模板課件Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.1Introduction臨時存儲:變量和數(shù)組永久存儲:文件保存大量的數(shù)據(jù)存儲在二級存儲設(shè)備中MagneticdisksOpticaldisksTapes17.1Introduction臨時存儲:變量和數(shù)組

本節(jié)中文件指的是磁盤文件。C++文件(file)分為兩類:二進制文件和文本文件。文本文件由字符序列組成,也稱ASCII碼文件,在文本文件中存取的最小信息單位為字符(character)二進制文件中存取的最小信息單位為字節(jié)(Byte),如.obj

C++把每一個文件都看成一個有序的字節(jié)流,每一個文件或者以文件結(jié)束符(EOF)結(jié)束,或者在特定的字節(jié)號處結(jié)束。012436578…n-1…文件結(jié)束符C++把文件看作有序的n個字節(jié)的流文件的基本概念:本節(jié)中文件指的是磁盤文件。C++文件(file)分Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.2TheDataHierarchyBits(二進制位)0or1計算機支持的最小數(shù)據(jù)項計算機電路執(zhí)行位處理所有數(shù)據(jù)項最終由位組成Characters(字符)數(shù)字、字母和專門的符號稱為“字符”能夠在特定計算機上用來編寫程序和代表數(shù)據(jù)項的所有字符的集合稱為“字符集”Char以字節(jié)形式存儲

(8bits)Wchar_t

占多個字節(jié)(用于非英文字符集的表示)17.2TheDataHierarchyBits(二17.2TheDataHierarchy(Cont.)Fields(字段或數(shù)據(jù)項)由字符組成代表一定的含義Example姓名,顏色等等Records(記錄)由多個字段組成C++中表現(xiàn)為:類ExampleAnemployee’srecordmightincludeid#,name,address,etc.記錄的關(guān)鍵字:Arecordkeyisafielduniquetoeachrecord17.2TheDataHierarchy(Cont.Fig.17.1

|Datahierarchy.Fig.17.1|Datahierarchy.17.2TheDataHierarchy字段2字段3……記錄:………文件1文件3字段1(關(guān)鍵字)文件2數(shù)據(jù)庫:一組相關(guān)的文件數(shù)據(jù)庫管理系統(tǒng):為建立和管理數(shù)據(jù)庫而設(shè)計的文件集合17.2TheDataHierarchy字段2字段3…Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.3FilesandStreams當(dāng)打開一個文件時,該文件就和某個流關(guān)聯(lián)起來了。對文件進行讀寫實際上受到一個文件定位指針(filepositionpointer)的控制。輸入流的指針也稱為讀指針,每一次提取操作將從讀指針當(dāng)前所指位置開始,每次提取操作自動將讀指針向文件尾移動。輸出流指針也稱寫指針,每一次插入操作將從寫指針當(dāng)前位置開始,每次插入操作自動將寫指針向文件尾移動。17.3FilesandStreams當(dāng)打開一個文件時17.3FilesandStreams

--I/O流模板之間的繼承關(guān)系

為了在C++中執(zhí)行文件處理,必須包含頭文件<iostream>和<fstream>17.3FilesandStreams

-17.3FilesandStreams--文件處理必須包含頭文件:#include<fstream><fstream>包括三種類模板的定義basic_ifstream(forfileinput)basic_ofstream(forfileoutput)basic_fstream(forfileinputandoutput)提供了處理字符流的模板特化ifstream:從文件中讀入字符(讀文件)ofstream:向文件輸出字符(寫文件)fstream:支持文件中字符的輸入和輸出生成這些流類模板特化的對象,即可打開文件程序和文件之間通過流對象交互17.3FilesandStreams--文Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.4CreatingaSequentialFileFilestructure需要程序員對文件結(jié)構(gòu)化C++:對文件作字節(jié)流處理順序文件vs

隨機存取文件順序文件:記錄一般按照關(guān)鍵字順序存放隨機存取文件:不需查找,直接讀取17.4CreatingaSequentialFil17.4CreatingaSequentialFile寫數(shù)據(jù)到文件創(chuàng)建ofstream對象構(gòu)造函數(shù)ofstream(constchar*filename,intmode)

filename:文件名由文件的主名和擴展名兩部分組成。mode:ios::out

:缺省模式,覆蓋文件中已有數(shù)據(jù)ios::app:向文件末尾添加數(shù)據(jù)例:ofstream

outClientFile("clients.dat",ios::out);建立了一個到文件的“通信通道”

如果該文件名不存在,則新建一個同名文件對于已創(chuàng)建的文件對象,使用成員函數(shù)打開文件與構(gòu)造函數(shù)的參數(shù)相同,可以先創(chuàng)建再打開例:ofstream

outClientFile;

outClientFile.open(“clients.dat”,ios::out);17.4CreatingaSequentialFilFig.17.5

|Fileopenmodes.Fig.17.5|Fileopenmodes.in

:(從文件讀取)打開方式只要含in,如文件不存在則返回失敗。在打開為輸入輸出方式時(同時用out),編程應(yīng)注意判斷是否失敗,失敗時千萬不可再寫入文件。out:

(寫入文件)如文件不存在,則建立新文件,如文件存在,如果同時未設(shè)定app,in,則文件清空。trunc:(打開文件,并清空它)文件不存在則建立新文件,與out默認(rèn)操作相同。但與in配合,文件不存在則返回失敗。app:(寫入文件,添加在末尾)原文件內(nèi)容保留,新數(shù)據(jù)接在尾部。ate:(atend,打開文件,文件指針在文件尾)文件指針可以移動,即新數(shù)據(jù)可寫到任何位置。文件是否清空由其它標(biāo)識決定。

trunc/app/ate最好配合out、in等一起用,因為不同的C++平臺,要求不同,一起用不會出錯。如不一起用,至少VC++不認(rèn)這種格式。

binary標(biāo)識以二進制方式打開文件。同時用out時,如文件不存在,則建立新文件,并且新文件能用,不必清狀態(tài)字。in:(從文件讀取)打開方式只要含in,如文件不存在則返文件打開方式:由在ios類中定義的公有枚舉成員決定:enumopen_mode{ in=0x01, out=0x02, ate=0x04, app=0x08, trunc=0x10, binary=0x80};fstreamiofile;//既輸入又輸出用iofile.open(“myfile.txt”,ios::in|ios::out);文件打開方式:fstreamiofile;//既輸入又輸出打開文件時應(yīng)該判斷是否成功,若成功,文件流對象值為非零值,不成功為0(NULL),文件流對象值就是指它的地址。17.4CreatingaSequentialFile

--流對象和磁盤文件關(guān)聯(lián)//打開一個文件完整的程序intmain(){

fstreamiofile(”myfile.txt”,ios::in|ios::out);if(!iofile){//“!”為重載的運算符cout<<”不能打開文件:”<<”myfile,txt”<<endl;return-1;}//失敗退回操作系統(tǒng)} 打開文件時應(yīng)該判斷是否成功,若成功,文件流對象值為非零值,不17.4CreatingaSequentialFile

--文件的打開與關(guān)閉1.說明一個文件流對象,這又被稱為內(nèi)部文件:ifstreamifile;//只輸入用ofstreamofile;//只輸出用fstreamiofile;//既輸入又輸出用2.使用文件流對象的成員函數(shù)打開一個磁盤文件。iofile.open(“myfile.txt”,ios::in|ios::out);3.使用提取(>>)和插入(<<)運算符對文件進行讀寫操作,或使用成員函數(shù)(get\put)進行讀寫。4.關(guān)閉文件。三個文件流類各有一個關(guān)閉文件的成員函數(shù)

:voidifstream::close();voidofstream::close();voidfstream::close();使用很方便,如:iofile.close();也可直接通過構(gòu)造函數(shù)打開文件:fstreamiofile(”myfile.txt”,ios::in|ios::out);17.4CreatingaSequentialFil17.4CreatingaSequentialFile

--文件關(guān)閉關(guān)閉文件時,系統(tǒng)把該文件相關(guān)聯(lián)的文件緩沖區(qū)中的數(shù)據(jù)寫到文件中,保證文件的完整,收回與該文件相關(guān)的內(nèi)存空間,把磁盤文件名與文件流對象之間的關(guān)聯(lián)斷開,可防止誤操作修改了磁盤文件。關(guān)閉文件并沒有取消文件流對象,該文件流對象又可與其他磁盤文件建立聯(lián)系。文件流對象在程序結(jié)束時,或它的生命期結(jié)束時,由析構(gòu)函數(shù)撤消。它同時釋放內(nèi)部分配的預(yù)留緩沖區(qū)。

調(diào)用析構(gòu)函數(shù)也會關(guān)閉相應(yīng)正在打開的文件17.4CreatingaSequentialFilFig17_04.cpp

(1of2)創(chuàng)建ofstream對象,打開文件Overloadedoperator!willreturntrueifthefiledidnotopensuccessfullyFig17_04.cpp創(chuàng)建ofstream對象,打開文件重載operatorvoid*

,遇到文件結(jié)束符EOF時(Ctrl+Z),返回一個空指針。使用“<<”向文件中寫入數(shù)據(jù)ofstream

的析構(gòu)函數(shù)被自動調(diào)用,隱式地關(guān)閉文件重載operatorvoid*,遇到文件結(jié)束符EOF時Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.5ReadingDatafromaSequentialFile創(chuàng)建

ifstream

對象ifstream構(gòu)造函數(shù)AfilenameAfile-openmodeios::in

缺省模式,只能從文件讀取數(shù)據(jù),最小權(quán)限原則例:ifstream

inClientFile("clients.dat",ios::in);對于已經(jīng)存在的ifstream對象,使用成員函數(shù)打開文件例:ifstream

inClientFile;

inClientFile.open("clients.dat",ios::in);17.5ReadingDatafromaSequeFig17_07.cpp

Fig17_07.cppOpenclients.datforinput重載operatorvoid*

,returns,遇到文件結(jié)束符,返回一個空指針。重載!:如果文件打開不成功,返回falseifstream的析構(gòu)函數(shù)隱式調(diào)用,關(guān)閉文件Openclients.datforinput重載oOutlineFig17_07.cpp

(3of3)OutlineFig17_07.cpp17.5ReadingDatafromaSequentialFile--順序文件的讀取示例題目要求:簡單文件的寫、讀、查找17.5ReadingDatafromaSeque讀寫文件#include<iostream>usingstd::cerr;usingstd::cout;usingstd::endl;usingstd::ios;#include<fstream>//filestreamusingstd::ofstream;//outputfilestreamusingstd::ifstream;#include<cstdlib>#include<cstring>intmain(){

ofstreamfout; fout.open("output.txt"); if(!fout) {cerr<<"Filecouldnotbeopened"<<endl; exit(1); } intnum=150; charname[]="JohnDoe"; fout<<num<<"\n"; fout<<name<<"\n";

fout.close();

ifstreamfin("output.txt");intnumber;charname2[20];fin>>number;fin.ignore();fin.getline(name2,'\n');//fin>>number>>name2;cout<<number<<""<<name2<<endl;strcpy(name2,"aaaabbb");cout<<"nowname2="<<name2<<endl;fin.seekg(5);fin.getline(name2,'\n');cout<<"newname2="<<name2<<endl;return0;}在Windows平臺下如果以“文本”方式打開文件,當(dāng)讀取文件的時候,系統(tǒng)會將所有的"\r\n"轉(zhuǎn)換成"\n";當(dāng)寫入文件的時候,系統(tǒng)會將"\n"轉(zhuǎn)換成"\r\n"寫入。如果以"二進制"方式打開文件,則讀/寫都不會進行這樣的轉(zhuǎn)換。讀寫文件#include<iostream>ifstrea17.5ReadingDatafromaSequentialFile--順序文件的讀取示例題目要求:實現(xiàn)文件的復(fù)制17.5ReadingDatafromaSequeintmain()//實現(xiàn)從源文件到目的文件的復(fù)制{charch;ifstreamsfile("d:\\Ex\\in.cpp");ofstreamdfile(“e:\\out.cpp");//只能創(chuàng)建文件,不能建立子目錄,如路徑不存在則失敗

if(!sfile){cout<<"不能打開源文件:"<<"d:\\Ex\\in.cpp"<<endl;return-1;}if(!dfile){cout<<"不能打開目標(biāo)文件:"<<"e:\\out.cpp"<<endl;return-1;}sfile.unsetf(ios::skipws);//把跳過空格控制位置0,即不跳過空格,否則空格全部未復(fù)制

while(sfile>>ch)dfile<<ch;sfile.close();//如沒有這兩個關(guān)閉函數(shù),析構(gòu)函數(shù)也可關(guān)閉

dfile.close();return0;}intmain()//實現(xiàn)從源文件到目的文件的復(fù)制#include<iostream.h>#include<fstream.h>intmain(){ ifstreamifile("abc.txt"); if(!ifile) { cout<<"abc.txt文件不能打開"<<endl; return0; } ofstreamofile("xyz.txt"); if(!ofile) { cout<<"xyz.txt文件不能打開"<<endl; return0; }

charch; while(ifile.get(ch)) ofile.put(ch);

ifile.close(); ofile.close(); return1;}將abc.txt復(fù)制到xyz.txt

使用輸入流成員函數(shù)get()從文本文件abc.txt中讀取一個字符ch,然后使用輸出流成員函數(shù)put()將字符ch寫入文本文件xyz.txt中,繼續(xù)這一過程直到get()讀完為止。#include<iostream.h>將abc.txt復(fù)制17.5ReadingDatafromaSequentialFile--順序文件的讀取示例程序解讀P61817.8題目要求:順序讀取文件內(nèi)容,按照要求顯示數(shù)據(jù)17.5ReadingDatafromaSequeTopics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.6Input/OutputofObjects規(guī)范化操作:在面向?qū)ο蟮某绦蛟O(shè)計中,信息總是放在對象的數(shù)據(jù)成員里。這些信息最終需要保存到文件中。讀取文件中對象的信息時,必須重新創(chuàng)建對象,把數(shù)據(jù)讀入對象,在運行過程中,對放在對象的數(shù)據(jù)成員里的信息利用和修改,運行結(jié)束時必須把這些信息重新保存到文件中,然后關(guān)閉文件在面向?qū)ο蟮腃++程序設(shè)計中,文件應(yīng)該在構(gòu)造函數(shù)中打開,并創(chuàng)建對象;而在析構(gòu)函數(shù)中保存和關(guān)閉文件,并撤銷對象。17.6Input/OutputofObjects規(guī)范Summary文件流分為三種文件輸入流(ifstream),文件輸出流(ofstream),文件輸入/輸出流(fstream)文件處理步驟定義文件流對象打開文件voidopen(constunsignedchar*filename,intmode,intaccess=filebuf::openprot);關(guān)閉文件調(diào)用成員函數(shù)close()Summary文件流分為三種Summary文件讀寫順序文件操作:這種操作方式只能從文件的開始處依次順序讀寫文件內(nèi)容,而不能任意讀寫文件內(nèi)容。讀:文件流類的get、getline、read成員函數(shù)以及抽取符“>>”寫:put、write函數(shù)以及插入符“<<”

隨機文件操作讀,寫:read,writeSummary文件讀寫實驗必選題目(交實驗報告):實驗任選題目(不交實驗報告):見實驗報告作業(yè)題目(Homework):

Homework!實驗必選題目(交實驗報告):Homework!文件定位指針:文件中下一個被讀取或?qū)懭氲淖止?jié)號istream、ostream都提供了修改文件定位指針的成員函數(shù)seekg(longpos,intmode)—istreamseekp(longpos,intmode)—ostream重定位文件定位定位指針Return文件定位指針:重定位文件定位定位指針Return文件的基本概念模板課件FileProcessing

Chapter17FileProcessingChapter17文件的基本概念模板課件Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.1Introduction臨時存儲:變量和數(shù)組永久存儲:文件保存大量的數(shù)據(jù)存儲在二級存儲設(shè)備中MagneticdisksOpticaldisksTapes17.1Introduction臨時存儲:變量和數(shù)組

本節(jié)中文件指的是磁盤文件。C++文件(file)分為兩類:二進制文件和文本文件。文本文件由字符序列組成,也稱ASCII碼文件,在文本文件中存取的最小信息單位為字符(character)二進制文件中存取的最小信息單位為字節(jié)(Byte),如.obj

C++把每一個文件都看成一個有序的字節(jié)流,每一個文件或者以文件結(jié)束符(EOF)結(jié)束,或者在特定的字節(jié)號處結(jié)束。012436578…n-1…文件結(jié)束符C++把文件看作有序的n個字節(jié)的流文件的基本概念:本節(jié)中文件指的是磁盤文件。C++文件(file)分Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.2TheDataHierarchyBits(二進制位)0or1計算機支持的最小數(shù)據(jù)項計算機電路執(zhí)行位處理所有數(shù)據(jù)項最終由位組成Characters(字符)數(shù)字、字母和專門的符號稱為“字符”能夠在特定計算機上用來編寫程序和代表數(shù)據(jù)項的所有字符的集合稱為“字符集”Char以字節(jié)形式存儲

(8bits)Wchar_t

占多個字節(jié)(用于非英文字符集的表示)17.2TheDataHierarchyBits(二17.2TheDataHierarchy(Cont.)Fields(字段或數(shù)據(jù)項)由字符組成代表一定的含義Example姓名,顏色等等Records(記錄)由多個字段組成C++中表現(xiàn)為:類ExampleAnemployee’srecordmightincludeid#,name,address,etc.記錄的關(guān)鍵字:Arecordkeyisafielduniquetoeachrecord17.2TheDataHierarchy(Cont.Fig.17.1

|Datahierarchy.Fig.17.1|Datahierarchy.17.2TheDataHierarchy字段2字段3……記錄:………文件1文件3字段1(關(guān)鍵字)文件2數(shù)據(jù)庫:一組相關(guān)的文件數(shù)據(jù)庫管理系統(tǒng):為建立和管理數(shù)據(jù)庫而設(shè)計的文件集合17.2TheDataHierarchy字段2字段3…Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.3FilesandStreams當(dāng)打開一個文件時,該文件就和某個流關(guān)聯(lián)起來了。對文件進行讀寫實際上受到一個文件定位指針(filepositionpointer)的控制。輸入流的指針也稱為讀指針,每一次提取操作將從讀指針當(dāng)前所指位置開始,每次提取操作自動將讀指針向文件尾移動。輸出流指針也稱寫指針,每一次插入操作將從寫指針當(dāng)前位置開始,每次插入操作自動將寫指針向文件尾移動。17.3FilesandStreams當(dāng)打開一個文件時17.3FilesandStreams

--I/O流模板之間的繼承關(guān)系

為了在C++中執(zhí)行文件處理,必須包含頭文件<iostream>和<fstream>17.3FilesandStreams

-17.3FilesandStreams--文件處理必須包含頭文件:#include<fstream><fstream>包括三種類模板的定義basic_ifstream(forfileinput)basic_ofstream(forfileoutput)basic_fstream(forfileinputandoutput)提供了處理字符流的模板特化ifstream:從文件中讀入字符(讀文件)ofstream:向文件輸出字符(寫文件)fstream:支持文件中字符的輸入和輸出生成這些流類模板特化的對象,即可打開文件程序和文件之間通過流對象交互17.3FilesandStreams--文Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.4CreatingaSequentialFileFilestructure需要程序員對文件結(jié)構(gòu)化C++:對文件作字節(jié)流處理順序文件vs

隨機存取文件順序文件:記錄一般按照關(guān)鍵字順序存放隨機存取文件:不需查找,直接讀取17.4CreatingaSequentialFil17.4CreatingaSequentialFile寫數(shù)據(jù)到文件創(chuàng)建ofstream對象構(gòu)造函數(shù)ofstream(constchar*filename,intmode)

filename:文件名由文件的主名和擴展名兩部分組成。mode:ios::out

:缺省模式,覆蓋文件中已有數(shù)據(jù)ios::app:向文件末尾添加數(shù)據(jù)例:ofstream

outClientFile("clients.dat",ios::out);建立了一個到文件的“通信通道”

如果該文件名不存在,則新建一個同名文件對于已創(chuàng)建的文件對象,使用成員函數(shù)打開文件與構(gòu)造函數(shù)的參數(shù)相同,可以先創(chuàng)建再打開例:ofstream

outClientFile;

outClientFile.open(“clients.dat”,ios::out);17.4CreatingaSequentialFilFig.17.5

|Fileopenmodes.Fig.17.5|Fileopenmodes.in

:(從文件讀取)打開方式只要含in,如文件不存在則返回失敗。在打開為輸入輸出方式時(同時用out),編程應(yīng)注意判斷是否失敗,失敗時千萬不可再寫入文件。out:

(寫入文件)如文件不存在,則建立新文件,如文件存在,如果同時未設(shè)定app,in,則文件清空。trunc:(打開文件,并清空它)文件不存在則建立新文件,與out默認(rèn)操作相同。但與in配合,文件不存在則返回失敗。app:(寫入文件,添加在末尾)原文件內(nèi)容保留,新數(shù)據(jù)接在尾部。ate:(atend,打開文件,文件指針在文件尾)文件指針可以移動,即新數(shù)據(jù)可寫到任何位置。文件是否清空由其它標(biāo)識決定。

trunc/app/ate最好配合out、in等一起用,因為不同的C++平臺,要求不同,一起用不會出錯。如不一起用,至少VC++不認(rèn)這種格式。

binary標(biāo)識以二進制方式打開文件。同時用out時,如文件不存在,則建立新文件,并且新文件能用,不必清狀態(tài)字。in:(從文件讀取)打開方式只要含in,如文件不存在則返文件打開方式:由在ios類中定義的公有枚舉成員決定:enumopen_mode{ in=0x01, out=0x02, ate=0x04, app=0x08, trunc=0x10, binary=0x80};fstreamiofile;//既輸入又輸出用iofile.open(“myfile.txt”,ios::in|ios::out);文件打開方式:fstreamiofile;//既輸入又輸出打開文件時應(yīng)該判斷是否成功,若成功,文件流對象值為非零值,不成功為0(NULL),文件流對象值就是指它的地址。17.4CreatingaSequentialFile

--流對象和磁盤文件關(guān)聯(lián)//打開一個文件完整的程序intmain(){

fstreamiofile(”myfile.txt”,ios::in|ios::out);if(!iofile){//“!”為重載的運算符cout<<”不能打開文件:”<<”myfile,txt”<<endl;return-1;}//失敗退回操作系統(tǒng)} 打開文件時應(yīng)該判斷是否成功,若成功,文件流對象值為非零值,不17.4CreatingaSequentialFile

--文件的打開與關(guān)閉1.說明一個文件流對象,這又被稱為內(nèi)部文件:ifstreamifile;//只輸入用ofstreamofile;//只輸出用fstreamiofile;//既輸入又輸出用2.使用文件流對象的成員函數(shù)打開一個磁盤文件。iofile.open(“myfile.txt”,ios::in|ios::out);3.使用提取(>>)和插入(<<)運算符對文件進行讀寫操作,或使用成員函數(shù)(get\put)進行讀寫。4.關(guān)閉文件。三個文件流類各有一個關(guān)閉文件的成員函數(shù)

:voidifstream::close();voidofstream::close();voidfstream::close();使用很方便,如:iofile.close();也可直接通過構(gòu)造函數(shù)打開文件:fstreamiofile(”myfile.txt”,ios::in|ios::out);17.4CreatingaSequentialFil17.4CreatingaSequentialFile

--文件關(guān)閉關(guān)閉文件時,系統(tǒng)把該文件相關(guān)聯(lián)的文件緩沖區(qū)中的數(shù)據(jù)寫到文件中,保證文件的完整,收回與該文件相關(guān)的內(nèi)存空間,把磁盤文件名與文件流對象之間的關(guān)聯(lián)斷開,可防止誤操作修改了磁盤文件。關(guān)閉文件并沒有取消文件流對象,該文件流對象又可與其他磁盤文件建立聯(lián)系。文件流對象在程序結(jié)束時,或它的生命期結(jié)束時,由析構(gòu)函數(shù)撤消。它同時釋放內(nèi)部分配的預(yù)留緩沖區(qū)。

調(diào)用析構(gòu)函數(shù)也會關(guān)閉相應(yīng)正在打開的文件17.4CreatingaSequentialFilFig17_04.cpp

(1of2)創(chuàng)建ofstream對象,打開文件Overloadedoperator!willreturntrueifthefiledidnotopensuccessfullyFig17_04.cpp創(chuàng)建ofstream對象,打開文件重載operatorvoid*

,遇到文件結(jié)束符EOF時(Ctrl+Z),返回一個空指針。使用“<<”向文件中寫入數(shù)據(jù)ofstream

的析構(gòu)函數(shù)被自動調(diào)用,隱式地關(guān)閉文件重載operatorvoid*,遇到文件結(jié)束符EOF時Topics17.1Introduction17.2TheDataHierarchy17.3FilesandStreams17.4CreatingaSequentialFile17.5ReadingDatafromaSequentialFile17.6Input/OutputofObjectsTopics17.1Introduction17.5ReadingDatafromaSequentialFile創(chuàng)建

ifstream

對象ifstream構(gòu)造函數(shù)AfilenameAfile-openmodeios::in

缺省模式,只能從文件讀取數(shù)據(jù),最小權(quán)限原則例:ifstream

inClientFile("clients.dat",ios::in);對于已經(jīng)存在的ifstream對象,使用成員函數(shù)打開文件例:ifstream

inClientFile;

inClientFile.open("clients.dat",ios::in);17.5ReadingDatafromaSequeFig17_07.cpp

Fig17_07.cppOpenclients.datforinput重載operatorvoid*

,returns,遇到文件結(jié)束符,返回一個空指針。重載!:如果文件打開不成功,返回falseifstream的析構(gòu)函數(shù)隱式調(diào)用,關(guān)閉文件Openclients.datforinput重載oOutlineFig17_07.cpp

(3of3)OutlineFig17_07.cpp17.5ReadingDatafromaSequentialFile--順序文件的讀取示例題目要求:簡單文件的寫、讀、查找17.5ReadingDatafromaSeque讀寫文件#include<iostream>usingstd::cerr;usingstd::cout;usingstd::endl;usingstd::ios;#include<fstream>//filestreamusingstd::ofstream;//outputfilestreamusingstd::ifstream;#include<cstdlib>#include<cstring>intmain(){

ofstreamfout; fout.open("output.txt"); if(!fout) {cerr<<"Filecouldnotbeopened"<<endl; exit(1); } intnum=150; charname[]="JohnDoe"; fout<<num<<"\n"; fout<<name<<"\n";

fout.close();

ifstreamfin("output.txt");intnumber;charname2[20];fin>>number;fin.ignore();fin.getline(name2,'\n');//fin>>number>>name2;cout<<number<<""<<name2<<endl;strcpy(name2,"aaaabbb");cout<<"nowname2="<<name2<<endl;fin.seekg(5);fin.getline(name2,'\n');cout<<"newname2="<<name2<<endl;return0;}在Windows平臺下如果以“文本”方式打開文件,當(dāng)讀取文件的時候,系統(tǒng)會將所有的"\r\n"轉(zhuǎn)換成"\n";當(dāng)寫入文件的時候,系統(tǒng)會將"\n"轉(zhuǎn)換成"\r\n"寫入。如果以"二進制"方式打開文件,則讀/寫都不會進行這樣的轉(zhuǎn)換。讀寫文件#include<iostream>ifstrea17.5ReadingDatafromaSequentialFile--順序文件的讀取示例題目要求:實現(xiàn)文件的復(fù)制17.5ReadingDatafromaSequeintmain()//實現(xiàn)從源文件到目的文件的復(fù)制{charch;ifstreamsfile("d:\\Ex\\in.cpp");ofstreamdfile(“e:\\out.cpp");//只能創(chuàng)建文件,不能建立子目錄,如路徑不存在則失敗

if(!sfile){cout<<"不能打開源文件:"<<"d:\\Ex\\in.cpp"<<endl;return-1;}if(!dfile){cout<<"不能打開目標(biāo)文件:"<<"e:\\out.cpp"<<endl;return-1;}sfil

溫馨提示

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

評論

0/150

提交評論