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

解讀C++編程的相干文件操作

編輯:關於C++

解讀C++編程的相干文件操作。本站提示廣大學習愛好者:(解讀C++編程的相干文件操作)文章只能為提供參考,不一定能成為您想要的結果。以下是解讀C++編程的相干文件操作正文


C++文件的概念
迄今為止,我們評論辯論的輸出輸入是以體系指定的尺度裝備(輸出裝備為鍵盤,輸入裝備為顯示器)為對象的。在現實運用中,常以磁盤文件作為對象。即從磁盤文件讀取數據,將數據輸入到磁盤文件。磁盤是盤算機的內部存儲器,它可以或許歷久保存信息,能讀能寫,可以刷新重寫,便利攜帶,因此獲得普遍應用。

文件(file)是法式設計中一個主要的概念。所謂“文件”,普通指存儲在內部介質上數據的聚集。一批數據是以文件的情勢寄存在內部介質(如磁盤、光盤和U盤)上的。操 作體系是以文件為單元對數據停止治理的,也就是說,假如想找存在內部介質上的數據, 必需先按文件名找到所指定的文件,然後再從該文件中讀取數據。要向內部介質上存儲數據也必需先樹立一個文件(以文件名標識),能力向它輸入數據。

外存文件包含磁盤文件、光盤文件和U盤文件。今朝應用最普遍的是磁盤文件,為論述便利,教程中凡用到外存文件的處所均以磁盤文件來代表,在法式中對光盤文件和U盤文件的應用辦法與磁盤文件雷同。

對用戶來講,經常使用到的文件有兩年夜類,一類是法式文件(program file),如C++的源法式文件(.cpp)、目的文件(.obj)、可履行文件(.exe)等。一類是數據文件(data file), 在法式運轉時,經常須要將一些數據(運轉的終究成果或中央數據)輸入到磁盤上寄存起來,今後須要時再從磁盤中輸出到盤算機內存。這類磁盤文件就是數據文件。法式中的輸出和輸入的對象就是數據文件。

依據文件中數據的組織情勢,可分為ASCII文件和二進制文件。ASCII文件又稱文本(text)文件或字符文件,它的每個字節放一個ASCII代碼,代表一個字符。二進制文件又稱外部格局文件或字節文件,是把內存中的數據按其在內存中的存儲情勢原樣輸入到磁盤上寄存。

關於字符信息,在內存中是以ASCII代碼情勢寄存的,是以,不管用ASCII文件輸入照樣用二進制文件輸入,其數據情勢是一樣的。然則關於數值數據,兩者是分歧的。例若有一個長整數100000,在內存中占4個字節,假如按外部格局直接輸入,在磁盤文件中占 4個字節,假如將它轉換為ASCII碼情勢輸入,則要占6個字節。

用ASCII碼情勢輸入的數據是與字符逐個對應的,一個字節代表一個字符,可以直接在屏幕上顯示或打印出來。這類方法應用便利,比擬直不雅,便於浏覽,便於對字符逐一停止輸出輸入。但普通占存儲空間較多,並且要消費轉換時光(二進制情勢與ASCII碼間的轉換)。用外部格局(二進制情勢)輸入數值,可以節儉外存空間,並且不須要轉換時光,但一個字節其實不對應一個字符,不克不及直接顯示文件中的內容。假如在法式運轉進程中有些中央成果數據臨時保留在磁盤文件中,今後又須要輸出到內存的,這時候用二進制文件保留是最適合的。假如是為了能顯示和打印以供浏覽,則應按ASCII碼情勢輸入。此時獲得的是ASCII文件,它的內容可以直接在顯示屏上不雅看。

C++供給了初級的I/O功效和高等的I/O功效。高等的I/O功效是把若干個字節組合為一個成心義的單元(如整數、單精度數、雙精度數、字符串或用戶自界說的類型的數據),然後以ASCII字符情勢輸出和輸入。例如將數據從內存送到顯示器輸入,就屬於高等I/O功效,先將內存中的數據轉換為ASCII字符,然後分離按整數、單精度數、雙精度數等情勢輸入。這類面向類型的輸出輸入在法式頂用得很廣泛,用戶覺得便利。但在傳輸年夜容量的文件時因為數據格局轉換,速度較慢,效力不高。

所謂初級的I/O功效是以字節為單元輸出和輸入的,在輸出和輸入時不停止數據格局的轉換。這類輸出輸入是以二進制情勢停止的。平日用來在內存和裝備之間傳輸一批字節。這類輸出輸入速度快、效力高,普通年夜容量的文件傳輸用無格局轉換的I/O。但應用時會覺得不年夜便利。

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類中界說的,它們是列舉常量,有多種選擇,見表

幾點解釋:
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