C++文件操作相关

代码

#include #include #include #include #include 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!"<>width>>height; //cout<width>>height; } fs.clear(); screen = Screen::getInstance(width, height); screen = Screen::getInstance(); fs.seekp(ios::beg); fs >getwidth>>getheight; cout<

说明 主函数中首先定义了string类型的文件名对象;
然后创建了 fstream 的对象;
随后调用open函数,使用读写模式打开文件。
string fn("screen.txt"); fstream fs; fs.open(fn, ios::in | ios::out);

通过使用类似下面的代码(fail()函数),对文件打开的状态进行判别。
对于使用 ios::in | ios::out 模式打开的文件,如果打开失败,一般来说是文件不存在(也有可能是文件是不可写的)
如果 fail() 函数返回真值,则创建该文件(用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); }

【C++文件操作相关】从文件中读入屏幕宽和高,如果读取失败,则清除文件操作的状态位,然后从键盘读入屏幕宽和高
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; }

移动文件的输出指针到文件头,然后将屏幕的宽和高写入到文件中。
如果写失败,则关闭文件并且返回 -1,结束程序。
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; }

移动文件的输入指针到文件头,然后从文件中读出将屏幕的宽和高,再将其显示到屏幕上。
最后关闭文件流。
fs.seekg(ios::beg); fs >> width >> height; cout << width << " " << height << endl; fs.close();

    推荐阅读