档案管理_档案管理之操作程序_第1页
档案管理_档案管理之操作程序_第2页
档案管理_档案管理之操作程序_第3页
档案管理_档案管理之操作程序_第4页
档案管理_档案管理之操作程序_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

檔案管理,15.1磁碟檔案15-215.1.1什麼是檔案15-215.1.2檔案名稱15-215.1.3開啟檔案open15-315.1.4檔案是否開啟成功15-615.1.5關閉檔案close15-715.2存取文字檔15-715.2.1寫入文字檔15-1115.2.4寫入單一字元put15-1215.2.5讀取單一字元get15-13,15.3存取二進位檔15-1715.3.1寫入二進位檔write15-1715.3.2附加資料到二進位檔write15-1915.3.3讀取二進位檔read15-2215.3.4檔案結束位置eof15-2415.4隨機存取資料15-2815.4.1移動讀取指標seekg15-2915.4.2移動寫入指標seekp15-2915.4.3取得讀取指標tellg15-3215.4.4取得寫入指標tellp15-32,15.1磁碟檔案,因為結束程式或關閉電源都將使得存在記憶體中的資料消失,所以每次執行前幾章的學生資料程式或員工資料程式時,都必須重新輸入資料。如果經常要使用這些資料,則可以在結束程式或關閉電源以前將資料存入磁碟檔案中,下次要用時再從磁碟檔案中讀取。,15.1.1什麼是檔案,在許多程式中,檔案(file)是基本的輸入與輸出物件。檔案物件(fileobject)收集了磁碟檔案資訊,包括檔案是否存在或開啟,以及存取檔案的路徑、大小、日期、與時間等等,所以可以利用檔案物件開啟、讀取、寫入、關閉、與取得磁碟檔案的資料。,15.1.2檔案名稱,所有的檔案都有一個可讓作業系統與使用者確認的獨一無二的檔名。每個作業系統都有它們自己的檔案命名方式,例如Windows可以接受長檔名,而MS-DOS則只接受短檔名(主檔名8個字元,副檔名3個字元)。基本上檔名分為主檔名與副檔名,而且主檔名與副檔名中間以句點(.)隔開。一般而言,副檔名代表檔案的種類。,15.1.2檔案名稱(續),15.1.3開啟檔案open,#includeifstream輸入物件;/建立輸入檔案物件ofstream輸出物件;/建立輸出檔案物件fstream輸出入物件;/建立輸入輸出檔案物件檔案物件.open(“檔案名稱”,ios:開啟模式);,15.1.3開啟檔案open(續),15.1.3開啟檔案open(續),先建立檔案物件,再開啟資料檔ofstreamout;/建立輸出檔案物件ifstreamin;/建立輸入檔案物件fstreamio;/建立輸入輸出檔案物件out.open(a:textOut.txt,ios:out);/開啟輸出檔案in.open(a:textIn.txt,ios:in);/開啟輸入檔案io.open(a:textIO.txt,ios:in|ios:out);/開啟輸入輸出檔案,15.1.3開啟檔案open(續),先建立檔案物件,再開啟二進位檔案ofstreamout;/建立輸出檔案物件ifstreamin;/建立輸入檔案物件fstreamio;/建立輸入輸出檔案物件out.open(textOut.txt,ios:binary|ios:out);/開啟二進位輸出檔案in.open(textIn.txt,ios:binary|ios:in);/開啟二進位輸入檔案io.open(textIO.txt,ios:binary|ios:in|ios:out);/開啟二進位輸入輸出,15.1.3開啟檔案open(續),建立同時開啟資料檔案/使用ofstream的建立者函數建立物件並開啟輸出檔案ofstreamout(a:textOut.dat,ios:out);/使用ifstream的建立者函數建立物件並開啟輸入檔案ifstreamin(a:textIn.dat,ios:in);/使用fstream的建立者函數建立物件並開啟輸入輸出檔案fstreamio(a:textIO.dat,ios:in,ios:out);,15.1.3開啟檔案open(續),建立同時開啟二進位檔案/使用ofstream的建立者函數建立物件並開啟輸出檔案ofstreamout(a:textOut.dat,ios:binary|ios:out);/使用ifstream的建立者函數建立物件並開啟輸入檔案ifstreamin(a:textIn.dat,ios:binary|ios:in);/使用fstream的建立者函數建立物件並開啟輸入輸出檔案fstreamio(a:textIO.dat,ios:binary|ios:in|ios:out);,15.1.4檔案是否開啟成功,在呼叫open函數後,必須先測試檔案是否開啟成功,然後才可正確存取檔案資料。ifstreammyFile;/建立輸入檔案物件in.open(a:textIn.txt,ios:in);/開啟輸入檔案if(!myFile)/測試檔案是否開啟成功cout開啟檔案失敗!n;/檔案代號錯誤,15.1.4檔案是否開啟成功(續),當使用建立者函數建立檔案物件並開啟檔案時,則可用is_open()函數來判斷檔案開啟是否成功ifstreammyFile(a:textIn.txt,ios:in);/建立並開啟檔案if(!myFile.is_open()/測試檔案是否開啟成功cout開啟檔案失敗!n;/檔案代號錯誤,15.1.5關閉檔案close,#include物件名稱.close();範例myFile.close();/關閉myFile檔案物件,15.2存取文字檔,一般文字編輯軟體都是將資料存入文字檔,例如微軟的NotePad就是將文件存入.txt檔,而WordPad與Word則是將文件存入.doc檔。所以本節將要介紹如何寫入資料至文字檔、如何附加資料到文字檔、與讀取文字檔資料等等。,15.2.1寫入文字檔,物件名稱.open(“檔案名稱”,ios:out);/開啟檔案物件名稱輸出字串;/寫入檔案範例一ofstreamfilePtr;/建立檔案物件filePtrfilePtr.open(a:textIO.txt,ios:out);/開啟檔案a:textIO.txtfilePtrLifeisnoteasy,butinthelongrunn;filePtritseasierthangoingtoelaborateendsn;filePtrtodenyit.n;/寫入字串到檔案filePtr.close();/關閉filePtr檔案物件,15.2.1寫入文字檔idname;/從鍵盤讀取整數與字串outFileidtnamen;/寫入整數與字串到檔案outFile.close();/關閉outFile檔案物件,15.2.2附加資料到文字檔,物件名稱.open(“檔案名稱”,ios:app);/開啟檔案物件名稱字串1字串2;/附加資料範例一ofstreamfilePtr;/建立檔案物件filePtrfilePtr.open(a:outFile.txt,ios:app);/開啟a:outFile.txtfilePtr人生的確不是簡單的,可是老老實實地活著,n;/附加字串到檔案filePtr總要比想出千方百計的逃避人生來得簡單些。n;/附加字串到檔案filePtr.close();,15.2.2附加資料到文字檔idname;/從鍵盤讀取整數與字串outFileidtname,物件名稱.open(“檔案名稱”,ios:in);/開啟檔案物件名稱緩衝區1緩衝區2;/讀取資料範例ifstreamoutFile;/建立檔案物件outFileintid;/存放資料緩衝區charname40;/存放資料緩衝區範例待續,15.2.3讀取文字檔(續),outFile.open(a:textIO.dat,ios:in);/開啟輸入檔a:textIO.datoutFileidname;/讀取檔案存入緩衝區while(!outFile.eof()/是否已到檔尾coutidname;/讀取檔案存入緩衝區outFile.close();/關閉檔案物件outFile,15.2.4寫入單一字元put,物件名稱.open(“檔案名稱”,ios:out);/開啟檔案物件名稱.put(字元緩衝區);/寫入資料範例ofstreamfilePtr;/建立檔案物件filePtrcharinData=Lifeisnoteasy,butinthelongrunnitseasierthangoingtoelaborateendsntodenyit.n;範例待續,15.2.4寫入單一字元put(續),範例續filePtr.open(a:textIO.txt,ios:in);/開啟輸入檔a:textIO.txtintlen=strlen(inData);/取得inData陣列的長度for(inti=0;ilen;i+)/寫入字元迴圈filePtr.put(inDatai);/寫入字元到textIO.txtfilePtr.close();/關閉檔案物件filePtr,15.2.5讀取單一字元get,物件名稱.open(“檔案名稱”,ios:in);/開啟檔案物件名稱.get(字元緩衝區);/讀取資料範例ifstreamfilePtr;/建立檔案物件filePtrcharinData;/存放資料緩衝區filePtr.open(a:textIO.txt,ios:in);/開啟輸出檔a:textIO.txtwhile(filePtr.get(inData)/取得資料並存入緩衝區coutinData;/顯示資料filePtr.close();/關閉檔案物件filePtr,Exercise,用C+寫一個檔案複製的程式下載f1.txt寫一個程式,利用檔案讀取及檔案寫入的方式,將f1.txt複製為f2.txt,15.3存取二進位檔,雖然讀寫格式化的文字檔非常簡單,也非常適用於文件檔案的存取,但它不是最有效的檔案管理方式。所以現在要介紹另一種的檔案管理方式:非格式化的二進位檔。,15.3.1寫入二進位檔write,物件名稱.open(“檔案名稱”,ios:binary);/開啟二進位檔物件名稱.write(constchar*緩衝區,寫入長度);/寫入資料範例classStudent/自定Student資料intstudent_id;charstudent_name40;public:Student()Student_id=10;Student_name=Tom;,15.3.1寫入二進位檔write(續),範例續intmain()StudentstuData;/建立類別物件ofstreamfilePtr;/建立輸出檔案物件filePtr.open(a:binIO.dat,ios:binary|ios:out);/開啟二進位檔filePtr.write(char*)/正常結束程式,15.3.2附加資料到二進位檔write,物件名稱.open(“檔案名稱”,ios:binary|ios:app);物件名稱.write(constchar*緩衝區,寫入長度);classStudent/自定Student資料intstudent_id;charstudent_name40;public:setData(id,name)student_id=id;student_name=name;,15.3.2附加資料到二進位檔write(續),範例續intmain()StudentstuData;/建立類別物件ofstreamfilePtr;/建立輸出檔案物件filePtr.open(a:binIO.dat,ios:binary|ios:app);/開啟二進位附加檔stuData.setData(1,Ken);/設定自定資料filePtr.write(char*)/正常結束程式,15.3.3讀取二進位檔read,物件名稱.open(“檔案名稱”,ios:binary|ios:in);物件名稱.read(constchar*緩衝區,讀取長度);範例classStudent/自定Student資料intstudent_id;charstudent_name40;public:voidshowData()coutstudent_idtstudent_nameendl;,15.3.3讀取二進位檔read(續),範例續intmain()StudentstuData;/建立類別物件ifstreamfilePtr;/建立輸出檔案物件filePtr.open(a:binIO.dat,ios:binary|ios:in);filePtr.read(char*)/正常結束程式,15.3.4檔案結束位置eof,輸入檔案物件.eof()範例classStudent/自定Student資料intstudent_id;charstudent_name40;public:voidshowData()coutstudent_idtstudent_nameendl;,15.3.4檔案結束位置eof(續),範例續intmain()StudentstuData;/建立類別物件ifstreamfilePtr;/建立輸出檔案物件filePtr.open(a:binIO.dat,ios:binary|ios:in);/開啟二進位附加檔filePtr.read(char*)/讀取長度=緩衝區大小,15.3.4檔案結束位置eof(續),範例續while(!filePtr.eof()/讀取資料迴圈stuData.showdata();/呼叫顯示資料函數filePtr.read(char*)/正常結束程式,Exercise,寫一個C+程式處理影像檔下載lena1.raw用photoshop瀏覽lena1.raw寫一個程式,利用檔案讀取及檔案寫入的方式,將lena1.raw複製為lena2.raw,但請將每一個字元的值c改為(255-c),再寫入lena2.raw注意c的型態應改為unsignedchar用photoshop瀏覽lena2.raw,15.4隨機存取資料,文字檔是一個字元或一個字串為單位,而二進位檔則是以一筆資料為單位,所以二進位檔案的優點就是可以隨機存取檔案內的資料,也就是說可以任意存取二進位檔中的任何一筆資料。,15.4.1移動讀取指標seekg,輸入檔案物件.seekg(移動距離,ios:起始位置),15.4.2移動寫入指標seekp,輸出檔案物件.seekp(移動距離,ios:起始位置),15.4.2移動寫入指標seekp(續),15.4.2移動寫入指標seekp(續),classStudent/自定Student資料intstudent_id;charstudent_name40;public:voidshowData()coutstudent_idtstudent_namen;intlen=sizeof(stuData);/計算每筆資料長度intpos=(n-1)*len;/計算第n筆資料位置filePtr.seekg(pos,ios:beg);/移動get指標filePtr.read(char*)/正常結束程式,15.4.3取得讀取指標tel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论