C++文件操作


#include <iostream>
#include <limits>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
void exitWhenInvalidScreen(int input) {
    if (input <= 0 || input>1000) {
        std::cout << "invalid screen size" << std::endl;
        exit(0);
    }
}
class Screen {
private:
    //----補(bǔ)充多個數(shù)據(jù)域成員
    unsigned int _width;
    unsigned int _height;

    // 在Screen類中獲取/釋放圖形窗口資源锋华,是一種RAII方法
    //   關(guān)于RAII庇麦,可以參見異常處理單元的材料
    Screen(unsigned int width, unsigned int height) {
        // 如果啟用了圖形庫樱蛤,則將初始化圖形模式的函數(shù)置于此處
        // initgraph(width_, height_);

        _width = width;
        _height = height;

    };
    Screen(){

    }
    ~Screen () {
        // 如果啟用了圖形庫旺矾,則將關(guān)閉圖形模式的函數(shù)置于此處
        // closegraph();
        delete instance;
    }

public:
    static Screen* instance;
    //----補(bǔ)充 getWidth() 與 getHeight() 函數(shù)援岩,

    static Screen* getInstance(unsigned int width = 640, unsigned int height = 480) {
        // 單例模式
        //----補(bǔ)充函數(shù)體
        if (instance == 0) {
            instance = new Screen(width, height);
        }
        return instance;
    }
    unsigned int getWidth(){
        return _width;
    }

    unsigned int getHeight(){
        return _height;
    }
};

Screen* Screen::instance = 0;
//----補(bǔ)充Screen類的特殊數(shù)據(jù)成員初始化語句

int main() {
    int width, height;
    Screen* screen = 0;
    string filename="screen.txt";
    fstream fs;
    fs.open(filename,ios::out|ios::in);
    if(fs.fail()){
        cout<<"open failed!"<<endl;
        fs.open(filename,ios::out);
        fs.close();
        fs.open(filename,ios::out|ios::in);

    }
    fs>>width>>height;
 //   cout<<width<<" "<<height<<endl;
    if(fs.fail()){
        cout<<"reading failed!"<<endl;
        cin>>width>>height;
    }
    fs.clear();


    screen = Screen::getInstance(width, height);
    screen = Screen::getInstance();
    fs.seekp(ios::beg);
    fs <<screen->getWidth() << " " <<screen->getHeight();
    fs.clear();
    fs.seekg(ios::beg);
    int getwidth,getheight;
    fs>>getwidth>>getheight;
    cout<<getwidth<<" "<<getheight<<endl;
    fs.close();
// GCC及VC編譯器在調(diào)試模式下會暫停贮折,便于查看運行結(jié)果
#if ( defined(__DEBUG__) || defined(_DEBUG) )
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.get();
#endif

    return 0;
}

說明

假定文件流對象為 fstream fs;

讀寫模式打開文件時遍坟,需要使用 ios::in | ios::out 作為流對象fs的 open 函數(shù)的參數(shù)

判斷文件操作(打開拳亿、讀寫)是否成功,使用 fs.fail() 判斷愿伴。如果成功肺魁, fail() 返回 false,否則返回 true

   if (fs.fail()) {
        輸出提示信息 
        用寫模式打開文件
        關(guān)閉文件
        再次用讀寫模式打開文件
    }
  1. 打開文件后隔节,如果文件為空(大小為0)鹅经,那么從文件流里面讀取數(shù)據(jù)時會失敗。此時需要從鍵盤讀取屏幕的寬和高怎诫。然后瘾晃,需要調(diào)用下面的函數(shù),清除文件流的狀態(tài)位幻妓,否則所有后續(xù)文件操作都會失敗蹦误。
    fs.clear()

  2. 移動文件寫指針的函數(shù)是 seekp(),文件頭的位置是 ios::beg。
    fs.seep(ios::beg) //將文件的寫指針移動到文件頭

  3. 移動文件的讀指針的函數(shù)是 seekg()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末强胰,一起剝皮案震驚了整個濱河市舱沧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偶洋,老刑警劉巖熟吏,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玄窝,居然都是意外死亡牵寺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門恩脂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帽氓,“玉大人,你說我怎么就攤上這事东亦。” “怎么了唬渗?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵典阵,是天一觀的道長。 經(jīng)常有香客問我镊逝,道長壮啊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任撑蒜,我火速辦了婚禮歹啼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘座菠。我一直安慰自己狸眼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布浴滴。 她就那樣靜靜地躺著拓萌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪升略。 梳的紋絲不亂的頭發(fā)上微王,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音品嚣,去河邊找鬼炕倘。 笑死,一個胖子當(dāng)著我的面吹牛翰撑,可吹牛的內(nèi)容都是我干的罩旋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘸恼!你這毒婦竟也來了劣挫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤东帅,失蹤者是張志新(化名)和其女友劉穎压固,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靠闭,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡帐我,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了愧膀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拦键。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖檩淋,靈堂內(nèi)的尸體忽然破棺而出芬为,到底是詐尸還是另有隱情,我是刑警寧澤蟀悦,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布媚朦,位于F島的核電站,受9級特大地震影響日戈,放射性物質(zhì)發(fā)生泄漏询张。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一浙炼、第九天 我趴在偏房一處隱蔽的房頂上張望份氧。 院中可真熱鬧,春花似錦弯屈、人聲如沸蜗帜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钮糖。三九已至,卻和暖如春酌住,著一層夾襖步出監(jiān)牢的瞬間店归,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工酪我, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留消痛,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓都哭,卻偏偏與公主長得像秩伞,于是被迫代替她去往敵國和親逞带。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • c++文件操作詳解 C++ 通過以下幾個類支持文件的輸入輸出: ofstream: 寫操作(輸出)的文件類 (由o...
    鮑陳飛閱讀 1,778評論 0 2
  • 代碼 說明 主函數(shù)中首先定義了string類型的文件名對象纱新;然后創(chuàng)建了 fstream 的對象展氓;隨后調(diào)用open函...
    qratosone閱讀 238評論 0 0
  • C++ 文件和流 到目前為止,我們已經(jīng)使用了 iostream 標(biāo)準(zhǔn)庫脸爱,它提供了 cin 和 cout 方法分別用...
    逝水流華年閱讀 3,931評論 0 2
  • C++ 初級C++ 1)C++和c區(qū)別: C++函數(shù)例:hello.cpp 全局變量和局部變量 作用域運算符 : ...
    賦閑閱讀 314評論 0 0
  • 遇汞。。簿废。睡空入,不著!族檬。歪赢。。跳单料,不動埋凯!。扫尖。白对。跑,不了藏斩!躏结。却盘。狰域。點上煙,裂著嘴黄橘,品味這生活--后悔不后悔兆览? 不想動,不想走塞关!...
    弦五ZF閱讀 636評論 0 0