本文主要介绍:C++利用ifstream和ofstream函数读写txt文件,包含矩阵以及字符串的读写。
说明:
需要添加的头文件有: #include<sstream>
#include<iostream>
#include<fstream>
#include<string>
同时需要添加命名空间:using namespace std;
一、读取矩阵
有时txt存储的是矩阵元素,如果矩阵元素之间是以空格为间隔,可以用以下程序读取:
ifstream infile;//定义文件变量 infile.open(txtPath,ios::in);//打开txtPath为文件路径 if(!infile) { AfxMessageBox("读取txt文件失败!"); return FALSE; } string temp,temp2mat;//定义中间变量 while(getline(infile,temp)) //读取一行,while循环,直到文件最后一行 { istringstream LineBand(temp);//转化成数据流 while(LineBand>>temp2mat) //依次输出一个数给temp2mat,直到该行最后一个数 { int Value = atoi(temp2mat.data());//将temp2mat由字符转化成整型,如果是浮点数,atoi改成atof } } infile.close();//关闭文件二、输出矩阵
ofstream outfile;//定义文件变量 outfile.open(OutPath,ios::out); //创建文件,OutPath为创建txt路径 if(!outfile) { AfxMessageBox("创建txt文件失败!"); return FALSE; } for(i=0;i<LineNum;i++)//依次写入每行,LineNum要写的行的个数 { for(j=0;j<RowNum;j++)//依次写入数字,以空格为间隔,RowNum该行的数字个数 outfile<<x<<" "; //以空格为间隔写数x outfile<<"\n"; //写完一行换行 } outfile.close();//关闭文件
注:有时候可能一次写完之后,希望下次接着写上次的写,此时只需要修改打开文件的类型: outfile.open(OutPath,ios::out | ios::app); //ios::app 在文件尾追加
相关其他类型可参考博客:http://www.cnblogs.com/zhcncn/archive/2013/01/08/2851656.html
三、读取字符串
可以读取字符串,也可以是汉字。
ifstream infile; //定义文件 infile.open(inPath,ios::in);//inPath txt路径 if(!infile) { AfxMessageBox("读取特征文件失败!"); return ; } string temp; char str[64]; CString str2; while(getline(infile,temp)) //依次读取一行,直到文件结束 { memset(str, '\0', sizeof(str)); //读取结果赋给char*型 memcpy(str,temp.c_str(),temp.size()); str2 = temp.c_str(); //读取结果赋给CString型 } infile.close();//关闭文件
ofstream outfile;//定义文件变量 outfile.open(inPath,ios::out); //创建文件,OutPath为创建txt路径 if(!outfile) { AfxMessageBox("创建txt文件失败!"); return ; } int LineNum =1; //写的行数 char str[] = "txt"; CString str2 = "你好"; for(int i=0;i<LineNum;i++)//依次写入每行,LineNum要写的行的个数 { outfile<<str; outfile<<"\n"; //写str字符串 outfile<<str2; outfile<<"\n"; //写CString字符串 } outfile.close();//关闭文件