青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

[轉]如何使用 類進行文件的 I/O 處理

如何使用 <fstream> 類進行文件的 I/O 處理

作者:Danny Kalev
編譯:MTT 工作室

下載源代碼
原文出處:How to Use <fstream> Classes for File I/O

摘要:傳統的文件 I/O 庫如 Unix 的 <io.h> 和 <stdio.h> ,由于其程序接口的原因,在很大程度上強制程序員進行某些處理,缺乏類型安全和國際化支持。C++ 的 <fstream> 庫則在文件的 I/O 方面提供了一個增強的、面向對象的、具有國際化意識的庫。本文將介紹如何使用這個庫進行文件的 I/O 處理并利用它來編寫易于跨平臺的代碼。


  大多數 C++ 程序員都熟悉不止一個文件 I/O 庫。首先是傳統的 Unix 風格的庫,它由一些低級函數如 read() 和 open()組成。其次是 ANSI C 的 <stdio.h> 庫,它包含 fopen() 和 fread()等函數。其它的還有一些具備所有權的庫或框架,比如 MFC,它有很多自己的文件處理類。
  這些庫一般都很難跨平臺使用。更糟的是,上述提到的 C 庫由于其程序接口的原因,在很大程度上強制程序員進行某些處理,而且缺乏類型安全支持。
  標準 C++ 提供提供了一個增強的、面向對象的、具有國際化意識的  <fstream> 庫。這個庫包含一系列派生于標準 ios_base 和 ios 類的類模板。因此, <fstream> 提供了高級的自動控制機制和健壯性。本文下面將示范如何使用  <fstream> 類實現文件的輸入/輸出處理:

第一步:創建文件流
  輸入文件流(ifstream)支持重載的 >> 操作符,同樣,輸出文件流(ofstream)支持重載的 << 操作符。結合了輸入和輸出的文件流被稱為 fstream。下面的程序創建了一個 ifstream 對象:dict,并將該對象中的每一個單字顯示到屏幕上:

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
string s;
cout<<"enter dictionary file: ";
cin>>s;
ifstream dict (s.c_str());
if (!dictionary) // were there any errors on opening?
exit(-1);
while (dictionary >> s) cout << s <<''\n'';
}      
  我們必須調用 string::c_str() 成員函數,因為 fstream 對象只接受常量字符串作為文件名。當你將文件名作為參數傳遞時,構造函數試圖打開指定的文件。接著,我們用重載的 !操作符來檢查文件的狀態。如果出錯,該操作符估值為 true。最后一行是個循環,每次反復都從文件讀取一個單字,將它拷貝到 s,然后顯示出來。注意我們不必顯式地檢查 EOF,因為重載操作符 >> 會自動處理。此外,我們不用顯式地關閉此文件,因為析構函數會為我們做這件事情。
  過時和荒廢的 <fstream.h> 庫支持 ios::nocreate 和 ios::noreplace 標志。但新的 <fstream> 庫已經取代了 <fstream.h> 并不再支持這兩個標志。
 
文件的打開模式
  如果你不顯式指定打開模式,fstream 類將使用默認值。例如,ifstream 默認以讀方式打開某個文件并將文件指針置為文件的開始處。為了向某個文件寫入數據,你需要創建一個 ofstream 對象。<fstream> 定義了下列打開模式和文件屬性:
ios::app // 從后面添加
ios::ate // 打開并找到文件尾
ios::binary // 二進制模式 I/O (與文本模式相對)
ios::in // 只讀打開
ios::out // 寫打開
ios::trunc // 將文件截為 0 長度

你可以用位域操作符 OR 組合這些標志:

ofstream logfile("login.dat", ios::binary | ios::app);

fstream 類型對象同時支持讀和寫操作:

fstream logfile("database.dat", ios::in | ios::out);

第二步:設置文件的位置
  文件具備一個邏輯指針,它指向該文件中的某個偏移位置。你可以通過調用seekp()成員函數,以字節為單位將這個指針定位到文件的任意位置。為了獲取從文件開始處到當前偏移的字節數,調用seekp()即可。在下面的例子中,程序將文件位置前移10個字節,然后調用 tellp()報告新位置:

ofstream fout("parts.txt");
fout.seekp(10); // 從0偏移開始前進 10 個字節
cout<<"new position: "<<fout.tellp(); // 顯示 10

你可以用下面的常量重新定位文ian指針:

ios::beg // 文件開始位置
ios::cur // 當前位置,例如: ios::cur+5
ios::end // 文件尾

第三步:讀寫數據
  fstream 類為所有內建數據類型以及 std::string 和 std::complex 類型重載 << 和 >> 操作符。下面的例子示范了這些操作符的使用方法:

fstream logfile("log.dat");
logfile<<time(0)<<"danny"<<''\n''; // 寫一條新記錄
logfile.seekp(ios::beg); // 位置重置
logfile>>login>>user; // 讀取以前寫入的值


作者簡介
  Danny Kalev 是一名通過認證的系統分析師和軟件工程師,專攻 C++ 和形式語言理論。1997 年到 2000 年期間,他是 C++ 標準委員會成員。最近他以優異成績完成了他在普通語言學研究方面的碩士論文。 業余時間他喜歡聽古典音樂,閱讀維多利亞時期的文學作品,研究 Hittite、Basque 和 Irish Gaelic 這樣的自然語言。其它興趣包括考古和地理。Danny 時常到一些 C++ 論壇并定期為不同的 C++ 網站和雜志撰寫文章。他還在教育機構講授程序設計語言和應用語言課程。

posted on 2007-04-15 21:26 ashura 閱讀(387) 評論(0)  編輯 收藏 引用 所屬分類: Computer Science

<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

導航

統計

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清中文字幕| 久久er99精品| 久久综合伊人77777麻豆| 日韩亚洲欧美成人一区| 亚洲国产精品久久91精品| 欧美激情一区二区三区在线| 欧美在线观看视频一区二区三区| 欧美一级专区免费大片| 久久久久免费观看| 你懂的一区二区| 亚洲激情在线播放| 亚洲午夜国产一区99re久久 | 欧美一区激情| 在线观看国产一区二区| 亚洲福利国产| 在线一区二区三区做爰视频网站 | 日韩一级免费观看| 99riav久久精品riav| 午夜精品福利视频| 欧美激情bt| 韩国欧美一区| 亚洲欧美日韩国产成人精品影院| 久久香蕉精品| 国产一区二区三区的电影| 一区二区三区日韩在线观看 | 国产欧美在线视频| 亚洲精品视频二区| 欧美成人午夜影院| 亚洲永久在线| 国产精品视频最多的网站| 亚洲国产乱码最新视频| 久久久久久久欧美精品| 久久国产精品网站| 精品动漫3d一区二区三区| 久久久99国产精品免费| 欧美一乱一性一交一视频| 国产精品一区二区三区久久| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲欧美99| 亚洲一区二区三区在线看| 国产精品jizz在线观看美国 | 欧美色图首页| 一本色道88久久加勒比精品| 一本久久综合亚洲鲁鲁| 国产精品人成在线观看免费| 欧美一区二区在线视频| 久久综合久久88| 一区二区三区国产在线| 欧美在线观看一二区| 亚洲清纯自拍| 亚洲一区二区动漫| 亚洲另类春色国产| 亚洲一区二区三区欧美 | 欧美视频精品在线| 欧美一区日本一区韩国一区| 另类国产ts人妖高潮视频| 亚洲一区在线观看视频 | 欧美精品久久久久久久久老牛影院| 亚洲乱码久久| 久久久www成人免费无遮挡大片 | 国产精品一区二区三区成人| 久久久精品国产99久久精品芒果| 美日韩精品免费观看视频| 亚洲美女在线看| 亚洲特级毛片| 欧美www视频| 久久久久国产精品人| 欧美xart系列高清| 欧美a级一区| 激情综合网址| 久久精品一本| 久久精品国产免费看久久精品| 欧美日韩网站| 亚洲天堂av电影| 亚洲综合99| 国产精品日韩欧美大师| 亚洲一区国产视频| 欧美在线啊v| 国产日本欧美视频| 午夜精品免费视频| 久久久久久一区二区三区| 国产色爱av资源综合区| 久久狠狠婷婷| 久久精选视频| 亚洲欧洲一区| 欧美图区在线视频| 午夜亚洲影视| 欧美高清自拍一区| 亚洲视频一区二区| 国产日韩精品一区二区三区| 欧美一区二区三区在| 国产综合亚洲精品一区二| 久久se精品一区二区| 亚洲国产精品久久91精品| 亚洲欧美成人网| 伊人夜夜躁av伊人久久| 欧美性色视频在线| 久热国产精品视频| 日韩亚洲视频| 玖玖国产精品视频| 午夜亚洲性色福利视频| 极品日韩av| 久久综合久久88| 欧美成人69av| 久久激情视频久久| 亚洲欧美激情在线视频| 亚洲国产精品v| 国产欧美精品一区二区色综合| 欧美成人午夜激情| 久久久精品国产免费观看同学| 日韩一二在线观看| 亚洲欧洲综合另类| 亚洲丶国产丶欧美一区二区三区| 欧美一区二视频| 久久成人羞羞网站| 亚洲欧美三级在线| 在线日韩av永久免费观看| 欧美电影免费观看高清| 午夜精品偷拍| 亚洲小视频在线| 中文日韩在线| 欧美在线中文字幕| 香蕉成人伊视频在线观看| 国产在线不卡视频| 1024国产精品| 一本久道久久综合婷婷鲸鱼| 亚洲一区日韩| 久久久久久久一区二区| 狼人天天伊人久久| 亚洲片国产一区一级在线观看| 99精品福利视频| 午夜国产精品视频| 久久人人看视频| 欧美视频成人| 在线精品福利| 在线视频精品一| 欧美高清视频在线| 亚洲午夜视频在线观看| 能在线观看的日韩av| 国产视频一区在线观看一区免费| 亚洲第一在线视频| 亚洲欧美综合国产精品一区| 欧美国产在线电影| 亚洲人成人一区二区在线观看| 亚洲免费久久| 欧美顶级艳妇交换群宴| 亚洲欧美精品在线观看| 免费在线观看成人av| 国内视频精品| 久久国产色av| 亚洲一区视频在线| 国产精品乱码一区二区三区| 日韩系列在线| 亚洲激情在线视频| 欧美成人精品1314www| 在线播放日韩| 亚洲国产欧美在线| 欧美激情视频给我| 国产精品腿扒开做爽爽爽挤奶网站| 一区二区三区.www| 亚洲日本va午夜在线电影| 欧美国产三区| 欧美伊人久久大香线蕉综合69| 亚洲在线视频观看| 好男人免费精品视频| 免费成人毛片| 欧美午夜精品一区| 久久国产精品99精品国产| 欧美一区二区三区在线| 亚洲国内精品在线| 在线亚洲美日韩| 在线观看亚洲专区| 亚洲乱码国产乱码精品精可以看 | 日韩视频一区二区在线观看 | 欧美另类视频在线| 亚洲欧美日韩中文在线制服| 欧美亚洲免费电影| 中文有码久久| 免费在线观看日韩欧美| 欧美一区网站| 欧美日韩综合一区| 亚洲黄一区二区三区| 久久夜色精品国产欧美乱| 欧美性大战久久久久久久蜜臀| 亚洲午夜激情| 欧美大香线蕉线伊人久久国产精品| 欧美一区二区在线播放| 久久天堂精品| 久久久久久久一区二区| 欧美日韩一区二区在线视频| 久久久久久久综合色一本| 国产精品久久久久久久久久久久久 | 久久久天天操| 欧美一区三区三区高中清蜜桃| 欧美日本在线| 一区二区三区高清在线观看| 日韩视频免费| 欧美日韩国产精品一区二区亚洲| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美日韩视频一区二区三区|