需要反省,说好一日一练的,昨天周五就偷懒出去逛了逛。。。吾当一日三省吾身。。。

今天的练习是写一个小程序,需要用到文件的读写,不过越写越长,又用到了很多乱七八糟的内置类什么的,就当是复习了吧,大概涉及到以下几个知识:

enum

fstream

stringstream

vector

渣程序如下:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>    // stringstream会用到
#include <vector>
using namespace std;
// 用户等级
enum level{Normal, // 普通用户Senior, // 高级用户VIP     // VIP用户
};  // 写完了才觉得这里用枚举太坑爹了,输出还要转换,算了,权当复习枚举了
class User
{
public:string name;level userLevel;
private:string password;
public:User(string n, level l, string pw):name(n),userLevel(l),password(pw){ }void PrintInfo();   // 在控制台打印void WriteInfo(string filename);    // 写入到文件
};
void User::PrintInfo()
{cout << "UserInfo:\n  name: " << name << "\n  userLevel: ";switch(userLevel){case Normal:cout << "普通用户\n  password: " << password << endl << endl;break;case Senior:cout << "高级用户\n  password: " << password << endl << endl;break;case VIP:cout << "VIP用户\n  password: " << password << endl << endl;break;default:cout << "普通用户\n  password: " << password << endl << endl;}
}
void User::WriteInfo(string filename)
{ofstream file;// 打开一个文件,open第一个参数为const char*,string类型需要做一下转换// 打开文件的模式为写入,且写入的所有数据将被追加到文件末尾file.open(filename.c_str(), ios::out|ios::app);if(!file){cerr << "打开文件 " << filename << "失败!" << endl << endl;}file << name << "\t  ";switch(userLevel){case Normal:file << "普通用户\t  " << password << endl;break;case Senior:file << "高级用户\t  " << password << endl;break;case VIP:file << "VIP用户\t   " << password << endl;break;default:file << "普通用户\t  " << password << endl;}file.close();   cout << "录入用户 " << name << " 信息到文件 " << filename << " 成功!" << endl;
}void ReadUserFile(string filename, vector<User *> &vec_user)
{string userLine;ifstream file;file.open(filename.c_str(), ios::in); while(getline(file, userLine)){string name;string userLevel;level fuckLevel;    // 为毛我之前要用enum。。。越写越坑爹string password;stringstream userStr(userLine);userStr >> name;userStr >> userLevel;if("高级用户" == userLevel){fuckLevel = Senior;}else if("VIP用户" == userLevel){fuckLevel = VIP;}else{fuckLevel = Normal;}userStr >> password;User *tempUser = new User(name, fuckLevel, password);vec_user.push_back(tempUser);}
}
int main(int argc, char *argv[])
{User user1("adam", Normal, "adam_is_good_girl~");User user2("john", Senior, "who_is_john?");User user3("lisa", VIP, "i_don't_know_lisa...");cout << "看一下我们都有哪些用户" << endl;user1.PrintInfo();user2.PrintInfo();user3.PrintInfo();string filename;cout << "请输入文件名:";cin >> filename;user1.WriteInfo(filename);user2.WriteInfo(filename);user3.WriteInfo(filename);cout << "刚才的用户信息已经被存放在 " << filename << "文件里,赶快去看看吧~!" << endl;vector<User *> vecUser;ReadUserFile(filename, vecUser);cout << "现在从文件里读出来看看" << endl;for(vector<User *>::iterator iter = vecUser.begin(); iter != vecUser.end(); iter++){(*iter)->PrintInfo();}return 0;
}

输出:

文件读写流fstream到底什么读什么是写?

ofstream是从内存到硬盘,即写入文件用的

ifstream是从硬盘到内存,即读到程序用的

o就是out,i就是in,不过这里需要转换一下思维,out和in是站在程序的角度看的,对于程序来说,out就是写出去,in就是读进来

没有ios::nocreate这个属性了?

这里有一点需要注意,当百度出来fstream用法,在打开方式里有这么一个东西:

ios::nocreate: 不建立文件,所以文件不存在时打开失败

这个我尝试了一下,但是不好用了,据度娘说从VS2003开始,这个就没有了,open 函数默认打开就是不创建文件

转载于:https://blog.51cto.com/adamcc/1409320

【C++】【一日一练】读写文件小实例【20140510】相关推荐

  1. java缓存读写文件小例子

    在一个叫掏你屋的博客上看到的小例子,缓存读写文件: package com.taoniwu; import java.util.regex.*; import java.io.*; public cl ...

  2. python生成试卷制卷系统_Python 读写文件 小应用:生成随机的测验试卷文件

    去年学习了python的读写文件部分,了解了python读写的常用模块os.shelve,今天准备把课后作业试着自己做一下 目标:1)生成35份试卷.每个试卷有50道选择题 2)为了防止有学生作弊,需 ...

  3. python逐行写入文件_python逐行读写txt文件的实例讲解

    实例如下所示: # -*-coding:utf-8-*- import os file_obj = open("test2.txt") all_lines = file_obj.r ...

  4. python文件对象提供了3个读方法、分别是-Python读写文件模式和文件对象方法实例详解...

    本文实例讲述了Python读写文件模式和文件对象方法.分享给大家供大家参考,具体如下: 一. 读写文件模式 利用open() 读写文件时,将会返回一个 file 对象,其基本语法格式如: open ( ...

  5. python写文件读文件-Python 实例:读写文件

    原标题:Python 实例:读写文件 读写文件是最常见的IO操作.内置了读写文件的函数,用法和的读写文件非常类似.在磁盘上读写文件的功能都是由提供的,现代不允许普通的程序直接操作磁盘,所以,读写文件就 ...

  6. java 对象读写_java 对象输入输出流读写文件的操作实例

    java 对象输入输出流读写文件的操作实例 java 支持对对象的读写操作,所操作的对象必须实现Serializable接口. 实例代码: package vo; import java.io.Ser ...

  7. python读写文件实例_python读写文件的简单示例

    这篇文章主要为大家详细介绍了python读写文件的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 首先看一个例子: # 来自www.512 ...

  8. 安卓小课堂之:读写文件(内部存储)

    啥是内部存储 内部存储位于系统中很特殊的一个位置,如果将文件存储在内部存储中,那么文件只能默认被你的应用访问到,并且同一个应用创建的所有文件都在相同的目录下.创建于内部存储的文件与应用相关联,应用卸载 ...

  9. java读写mysql数据库_Java读写MySQL数据库小实例

     Java读写MySQL数据库小实例 首先需要安装和配置好MySQL数据库.接下来,先创建一个数据库,Java代码连接此数据库,然后读写. 假设基于MySQL命令行创建一个叫做:phildatab ...

最新文章

  1. 有哪些适合放在程序员办公桌上的高逼格物件?哈哈哈哈哈哈哈!
  2. android switcher控件,Android ViewSwitcher 的功能与用法
  3. linux脚本编程(shell)浅介 (转载)
  4. [转]序列化悍将Protobuf-Net,入门动手实录
  5. css引入矢量图标_WEB 项目开发中的图标管理解决方案
  6. textview字体切换颜色_百元耳机支持主从切换,关键双耳双麦还能立体降噪
  7. 【Vue案例一】实现跑马灯效果
  8. 【C语言】文件程序设计实践
  9. Linux 内核漏洞暴露栈内存,造成数据泄露
  10. go数据类型之map
  11. 最新 Python 爬虫利器!
  12. 小红帽linux操作教程_linux入门教程 Redhat使用指南
  13. 安卓手机通过抓包实现钉钉网课刷赞
  14. 最小公倍数求解完全解读
  15. OWASP TOP 10 及防御
  16. 古时候有个【百僧问题】,一百馒头一百僧,大僧三个更无争,小僧三人分一个,大小和尚各几丁? *...
  17. ​在线问题反馈模块实战(十二)​:实现图片删除功能
  18. 阿里云国际版云计算应用在企业领域的优势有哪些
  19. 三维可视化引擎让空间数据管理更高效
  20. Mac 终于有显示隐藏文件的快捷键了

热门文章

  1. STM8S——8位基本定时器(TIM4)
  2. HDU 5985 Lucky Coins 数学
  3. java string类型的初始化
  4. Head First 设计模式中的命令模式 的一个错误
  5. [导入]C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.zip(10.41 MB)...
  6. 诗和远方:无题(五十)
  7. IoC、Spring 环境搭建、Spring 创建对象的三种方式、DI
  8. Log4j2完整XML参考(详细注释说明)
  9. ProtoBuf协议详解
  10. 常见的6种线程池及简单使用