#include
#include
#include
#include
using namespace std;
//用于读取各类文件的函数模板
template
int loadfile(list&basic_any,string &filename)
{
ifstream infile(filename);
int num=0;
if (!infile){
cout <<"没有找到此数据文件!"<}
else {
basic_l temp;
while (infile >> temp){
basic_any.push_back(temp);
num++;
}
infile.close();
infile.clear();
}
return num;
}
//用于写入各类文件的函数模板
template
void savefile(list&basic_any, string &filename)
{
ofstream outfile(filename);
list::iterator li_f = basic_any.begin();
list::iterator li_e = basic_any.end();
for(;li_f!=li_e;li_f++){
outfile<<*li_f;
}
outfile.close();
outfile.clear();
}
class BaseData
{
friend istream& operator >> (istream &in, BaseData &m_class)
{
in >> m_class.line
>> m_class.tim
>> m_class.live1
>> m_class.live2
>> m_class.row;
return in;
}
friend ostream & operator << (ostream& out, BaseData& m_class)
{
out << m_class.line <<"\t"
<< < < return out;
}
public:
int line;
float tim;
float live1;
float live2;
int row;
};
int main()
{
lista;
string b;
cout<<"请输入所有文件名,空格或回车间隔,按Ctrl+Z结束"<while(cin>>b){
loadfile(a,b);
}
cout <<"请输入要保存的文件名"<cin>>b;
savefile(a,b);
}
文件名有规律,可用程序生成输入文件名。
例如:for (i=1;i<=n;i++) sprintf(namein,"aa%d.txt",i);
生成输入文件名 aa1.txt, aa2.txt, aa3.txt ...
不要求选择数据,那么可以用循环语句按行读入,按行写出。
程序如下:
#include
#include
using namespace std;
#include
main(){
FILE *fin, *fout;
char namein[80];
char line[80];
int i,j;
int n=4;fout = fopen("abc.txt","w"); // 输出文件
for (i=1;i<=n;i++){
sprintf(namein,"aa%d.txt",i); //输入文件名
fin = fopen(namein,"r"); // 打开1个文件
if (fin !=NULL){
while(1){
if (fgets(&line[0],80,fin)==NULL) break; // 读1行
fprintf(fout,"%s",line); //写1行
};
fclose(fin);
};
}
fclose(fout);
return 0;
}
======
更简单的是用system(), 调 DOS copy 命令来做。
这里假设string类型可能包含任意字符。否则,只需用不可能出现的字符分隔开即可。
因此,唯一的办法是将string的长度也写入到文件当中。下面是示例:
#include
#include
#include
#include
#include
inline void WriteString(std::ostream& ostr, std::string const& str) {
// 写入字符串长度
ostr << str.size() << "\n";
// 写入字符串
ostr.write(str.data(), str.size());
}
inline std::string ReadString(std::istream& istr) {
// 获取字符串长度
std::string line;
std::getline(istr, line);
std::istringstream tmp(line);
std::size_t size;
tmp >> size;
// 读取字符串
std::vector
istr.read(result.data(), size);
return std::string(result.begin(), result.end());
}
int main() {
std::string const filename = "t.txt", s1 = "string 1 \n Yeah!", s2 = "string 2 \\ Yep!";
{
std::ofstream ostr(filename);
WriteString(ostr, s1);
WriteString(ostr, s2);
}
{
std::ifstream istr(filename);
std::cout << (ReadString(istr) == s1 && ReadString(istr) == s2) << "\n";
}
return 0;
}