C++ 输入输出 包含文件读写

参考来自http://kingplesk.org/2011/05/c-ifstream-%E9%80%90%E8%A1%8C%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6/

// Name        : Hello.cpp

// Author      : 

// Version     :

// Copyright   : Your copyright notice

// Description : Hello World in C++, Ansi-style

//============================================================================

#include <iostream>

#include <cstdlib>

#include <fstream>



using namespace std;



int main(int argc,char **argv){

    ifstream out;

    string str = "d:\\text.txt";

    out.open(str.c_str(), ios::in);

    string line;

    while(!out.eof()){

        std::getline(out,line);

        cout <<line<<endl;

    }

    out.close();

    return 0;

}

二、 文件读写模式

C++ std::fstream open mode

从旧blog转移过来的。
前些日子写数据库实验的时候,为了这些知识没少头疼过,基础贫弱啊。
ios::app:   以追加的方式打开文件 
ios::ate:   文件打开后定位到文件尾,ios:app就包含有此属性 
ios::binary:  以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 
ios::in:    文件以输入方式打开 
ios:out:   文件以输出方式打开 
ios::nocreate: 不建立文件,所以文件不存在时打开失败  
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 
ios::trunc:  如果文件存在,把文件长度设为0
说下某些地方用过之后的惊奇吧(说惊奇其实只是自己之前把知识理解歪了而已)。
ios::app,该模式只能把数据添加到文件的尾部,如果想修改别的地方是不行的,因为seekp()根本不起作用,指针总是指向末尾,而我之前一直误解该模式等价于ios::out | ios::nocreate。
ios::in | ios::app,也是拜对ios::app的错误理解所赐,居然认为这是ios_in | ios_out,结果数据库的文件是越写越长,自己还一愣一愣的。
ios_binary,感觉只是一个表达指示作用,事实上,用read,write方法的话,都是进行二进制操作的。不过可能添加这个指示的话,会有优化作用?没校验过。
终于明白ios_binary的意义了,如果操作的真的是二进制文件,那么就一定要指定它。我今天操作一个文件时没有指定它,结果写进去的buffer是一行一行的,因为buffer的最后一个是换行符。后来指定为binary之后,写入的内容终于连续了。

  1. #include<map>
  2. #include<iostream>
  3. #include<fstream>
  4. #include<string>
  5. using namespace std;

  6. string src="/usr/local/www.tendebug.com/doc/mysql.xml";

  7. int read_mysql_xml(string &host,string &user,string &pass, string &dbname,int &port)
  8. {
  9.     ifstream readfile;
  10.     string line;
  11.     int count=5;
  12.     map<string ,string> infile;
  13.     
  14.     readfile.open(src.c_str(),ios::in);
  15.     
  16.     if(!readfile)
  17.     {
  18.         return 1; /*没有打开该文件*/
  19.     }
  20.     while(count--)
  21.     {
  22.         getline(readfile,line);
  23.         string::size_type index = line.find_first_of(" ",0);    
  24.         string first = line.substr(0,index);
  25.         string second = line.substr(index+1);
  26.         infile[first]=second;
  27.     }
  28.     host = infile["host"];
  29.     user = infile["user"];
  30.     pass = infile["pass"];
  31.     dbname = infile["dbname"];
  32.     port = atoi(infile["port"].c_str());
  33. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值