C++文件操作相關(guān)

代碼

#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:
    //----補充多個數(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;
    //----補充 getWidth() 與 getHeight() 函數(shù)咽安,

    static Screen* getInstance(unsigned int width = 640, unsigned int height = 480) {
        // 單例模式
        //----補充函數(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;
//----補充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;
}

說明

主函數(shù)中首先定義了string類型的文件名對象蓬推;
然后創(chuàng)建了 fstream 的對象妆棒;
隨后調(diào)用open函數(shù),使用讀寫模式打開文件沸伏。

string fn("screen.txt");
fstream fs;
fs.open(fn, ios::in | ios::out);

通過使用類似下面的代碼(fail()函數(shù))糕珊,對文件打開的狀態(tài)進行判別。
對于使用 ios::in | ios::out 模式打開的文件毅糟,如果打開失敗红选,一般來說是文件不存在(也有可能是文件是不可寫的)
如果 fail() 函數(shù)返回真值,則創(chuàng)建該文件(用ios::out模式)姆另;
然后再次使用 **ios::in | ios::out **模式打開該文件喇肋。

    if (fs.fail()) {
        cout << "file does not exist." << endl;
        fs.open(fn, ios::out);
        fs.close();
        fs.open(fn, ios::in | ios::out);
    }

從文件中讀入屏幕寬和高,如果讀取失敗迹辐,則清除文件操作的狀態(tài)位蝶防,然后從鍵盤讀入屏幕寬和高

    fs >> width >> height;
    if (fs.fail()) {
        cout << "can not read from file" << endl;
        cout << "Please input screen width and height:" << endl;
        fs.clear();
        cin >> width >> height;
    }

移動文件的輸出指針到文件頭,然后將屏幕的寬和高寫入到文件中明吩。
如果寫失敗间学,則關(guān)閉文件并且返回 -1,結(jié)束程序。

    fs.seekp(ios::beg);
    fs << screen->getWidth() << " " << screen->getHeight() << endl;
    if (fs.fail()) {
        cout << "Can not write to file, exit" << endl;
        fs.close();
        return -1;
    }

移動文件的輸入指針到文件頭菱鸥,然后從文件中讀出將屏幕的寬和高宗兼,再將其顯示到屏幕上。
最后關(guān)閉文件流氮采。

    fs.seekg(ios::beg);
    fs >> width >> height;
    cout << width << " " << height << endl;
    fs.close();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末殷绍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鹊漠,更是在濱河造成了極大的恐慌主到,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躯概,死亡現(xiàn)場離奇詭異登钥,居然都是意外死亡,警方通過查閱死者的電腦和手機娶靡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門牧牢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姿锭,你說我怎么就攤上這事塔鳍。” “怎么了呻此?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵轮纫,是天一觀的道長。 經(jīng)常有香客問我焚鲜,道長掌唾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任忿磅,我火速辦了婚禮糯彬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贝乎。我一直安慰自己情连,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布览效。 她就那樣靜靜地躺著却舀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锤灿。 梳的紋絲不亂的頭發(fā)上挽拔,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音但校,去河邊找鬼螃诅。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的术裸。 我是一名探鬼主播倘是,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袭艺!你這毒婦竟也來了搀崭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤猾编,失蹤者是張志新(化名)和其女友劉穎瘤睹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體答倡,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡轰传,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瘪撇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片获茬。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倔既,靈堂內(nèi)的尸體忽然破棺而出锦茁,到底是詐尸還是另有隱情,我是刑警寧澤叉存,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站度帮,受9級特大地震影響歼捏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笨篷,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一瞳秽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧率翅,春花似錦练俐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辜贵,卻和暖如春悯蝉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背托慨。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工鼻由, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓蕉世,卻偏偏與公主長得像蔼紧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狠轻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

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

  • C/C++輸入輸出流總結(jié) 前兩天寫C++實習(xí)作業(yè)奸例,突然發(fā)現(xiàn)I/O是那么的陌生,打了好長時間的文件都沒有打開哈误,今天終...
    LuckTime閱讀 1,721評論 0 6
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫哩至、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,065評論 4 62
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,131評論 30 470
  • c++文件操作詳解 C++ 通過以下幾個類支持文件的輸入輸出: ofstream: 寫操作(輸出)的文件類 (由o...
    鮑陳飛閱讀 1,773評論 0 2
  • 昨天晚上蜜自,我和全國的家長朋友一起聆聽了愛菩貌、自然、生命力體系的一節(jié)微課《孩子愛哭重荠、膽小怎么辦箭阶?》 對于這樣一個話題,...