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:
    //----补充多个数据域成员
    unsigned int _width;
    unsigned int _height;

    // 在Screen类中获取/释放图形窗口资源,是一种RAII方法
    //   关于RAII,可以参见异常处理单元的材料
    Screen(unsigned int width, unsigned int height) {
        // 如果启用了图形库,则将初始化图形模式的函数置于此处
        // initgraph(width_, height_);

        _width = width;
        _height = height;

    };
    Screen(){

    }
    ~Screen () {
        // 如果启用了图形库,则将关闭图形模式的函数置于此处
        // closegraph();
        delete instance;
    }

public:
    static Screen* instance;
    //----补充 getWidth() 与 getHeight() 函数,

    static Screen* getInstance(unsigned int width = 640, unsigned int height = 480) {
        // 单例模式
        //----补充函数体
        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类的特殊数据成员初始化语句

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编译器在调试模式下会暂停,便于查看运行结果
#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 函数的参数

判断文件操作(打开、读写)是否成功,使用 fs.fail() 判断。如果成功, fail() 返回 false,否则返回 true

   if (fs.fail()) {
        输出提示信息 
        用写模式打开文件
        关闭文件
        再次用读写模式打开文件
    }
  1. 打开文件后,如果文件为空(大小为0),那么从文件流里面读取数据时会失败。此时需要从键盘读取屏幕的宽和高。然后,需要调用下面的函数,清除文件流的状态位,否则所有后续文件操作都会失败。
    fs.clear()

  2. 移动文件写指针的函数是 seekp(),文件头的位置是 ios::beg。
    fs.seep(ios::beg) //将文件的写指针移动到文件头

  3. 移动文件的读指针的函数是 seekg()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • c++文件操作详解 C++ 通过以下几个类支持文件的输入输出: ofstream: 写操作(输出)的文件类 (由o...
    鲍陈飞阅读 1,746评论 0 2
  • 代码 说明 主函数中首先定义了string类型的文件名对象;然后创建了 fstream 的对象;随后调用open函...
    qratosone阅读 214评论 0 0
  • C++ 文件和流 到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用...
    逝水流华年阅读 3,892评论 0 2
  • C++ 初级C++ 1)C++和c区别: C++函数例:hello.cpp 全局变量和局部变量 作用域运算符 : ...
    赋闲阅读 295评论 0 0
  • 。。。睡,不着!。。。跳,不动!。。。跑,不了!。。。点上烟,裂着嘴,品味这生活--后悔不后悔? 不想动,不想走!...
    弦五ZF阅读 599评论 0 0