编写算法的时候经常会从文本中读取配置参数,这里写一篇文章记录读取文本文件的方法(使用流操作实现,c语言实现的方法,这里就先不做介绍,如果以后用到了,再写文章记录)。
1.头文件
#include <fstream>
如果使用string,还需要包含string类的头文件
#include <string>
2.打开指定的文件
void open ( const char * filename,
ios_base::openmode mode = ios_base::in | ios_base::out );
打开文件的方式:
ios::in | 输入(读),打开文件 |
ios::out | 输出(写),打开文件 |
ios::ate | 初始位置在文件尾 |
ios::app | 往文件末尾追加内容 |
ios::trunc | 如果文件存在,则先删除文件 |
ios::binary | 二进制方式打开文件 |
ifstream fin(filename, ios::in);
if (!fin.is_open())
{
cout<<"[error] load "<<filename<<" file falied!"<<endl;
return -1;
}
3.逐行读取内容
string strLine;
while(!fin.eof())
{
getline(fin,strLine);
}
4.读文件示例
int read_file(string filename)
{
ifstream fin(filename, ios::in);
if (!fin.is_open())
{
cout<<"[error] load "<<filename<<" file falied!"<<endl;
return -1;
}
string strLine;
while(!fin.eof())
{
getline(fin,strLine);
int ret = strLine.find(';');
string image_name = strLine.substr(0,ret);
string label_name = strLine.substr(ret+1,strLine.length()-ret);
cout<<"data = "<<image_name.c_str()<<" ; label = "<<label_name.c_str()<<endl;
}
return 0;
}
5.写文件示例
int write_file(string filename)
{
ofstream fout(filename,ios::out | ios::app);
if (!fout.is_open())
{
cout<<"open/create "<<filename.c_str()<<" failed!"<<endl;
return -1;
}
fout<<"123456"<<endl;
fout.close();
return 0;
}
6.int转string
#inlcude <strstream> int int2string() { int data = 123; string str_data; strstream ss; ss<<data; ss>>str_data; cout<<str_data.c_str()<<endl; }