C++ 如何读取多个文件后存储到一个文件中
用多个文件指针同时打开多个文件即可。
1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。2、例程:
#includeint a;char b,c[100];int main(){ FILE * fp0 = fopen("input0.txt", "r");//打开输入文件input0 FILE * fp1 = fopen("input1.txt", "r");//打开输入文件input1 FILE * fp2 = fopen("output.txt", "w");//打开输出文件 if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出 puts("不能打开文件!"); rturn 0; } fscanf(fp0,"%d",&a);//从第一个输入文件读取一个整数 b=fgetc(fp0);//从第一个输入文件读取一个字符 fgets(c,100,fp1);//从第二个输入文件读取一行字符串 printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数 fputs(c,fp2);//向输出文件写入一行字符串 fputc(b,fp2);//向输出文件写入一个字符 fprintf(fp2,"%d",a);//向输出文件写入一个整数 fclose(fp0);//关闭输入文件 fclose(fp1);//关闭输入文件 fclose(fp2);//关闭输出文件,相当于保存 return 0;}
void FileSearch(CString root)
{ // root 为目录名
CFileFind ff;
CString FilePath;
if (root.Right(1)!="/")
{
root+="/";
}
root+="*.*";
BOOL res=ff.FindFile(root);
while (res)
{
res=ff.FindNextFile();
FilePath=ff.GetFilePath();
if (ff.IsDirectory() && !ff.IsDots())// 找到的是文件夹
{
FileSearch(FilePath);// 递归
}
else if (!ff.IsDirectory() && !ff.IsDots())// 找到的是文件
{
m_ff+=FilePath;
m_ff+=" ";
}
}
}
求采纳为满意回答。
#include <iostream>
#include <fstream>
#include <list>
#include <string>
using namespace std;
//用于读取各类文件的函数模板
template <class basic_l>
int loadfile(list<basic_l> &basic_any,string &filename)
{
ifstream infile(filename);
int num=0;
if (!infile){
cout <<"没有找到此数据文件!"<<endl;
}
else {
basic_l temp;
while (infile >> temp){
basic_any.push_back(temp);
num++;
}
infile.close();
infile.clear();
}
return num;
}
//用于写入各类文件的函数模板
template <class basic_s>
void savefile(list<basic_s> &basic_any, string &filename)
{
ofstream outfile(filename);
list<basic_s>::iterator li_f = basic_any.begin();
list<basic_s>::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 <<""
<<m_class.tim <<""
<<m_class.live1 <<""
<<m_class.live2 <<""
<<m_class.row;
return out;
}
public:
int line;
float tim;
float live1;
float live2;
int row;
};
int main()
{
list <BaseData> a;
string b;
cout<<"请输入所有文件名,空格或回车间隔,按Ctrl+Z结束"<<endl;
while(cin>>b){
loadfile(a,b);
}
cout <<"请输入要保存的文件名"<<endl;
cin>>b;
savefile(a,b);
}
文件名有规律,可用程序生成输入文件名。
例如:for (i=1;i<=n;i++) sprintf(namein,"aa%d.txt",i);
生成输入文件名 aa1.txt, aa2.txt, aa3.txt ...
不要求选择数据,那么可以用循环语句按行读入,按行写出。
程序如下:
#include <iostream>
#include <cstring>
using namespace std;
#include <stdio.h>
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 <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <iostream>
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<char> result(size);
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;
}
C++ 如何读取多个文件后存储到一个文件中
include <iostream>#include <fstream>#include <list>#include <string>using namespace std;\/\/用于读取各类文件的函数模板template <class basic_l>int loadfile(list<basic_l> &basic_any,string &filename){ifstream infile(filename);int num=0;if (!infile){cout <<"没有找到此数据文件!"...
怎么样把几个文件放到一个窗口
要将几个文件内容整合到一个窗口内显示,且避免使用表格或图片的形式,可以通过文本编辑器或集成开发环境(IDE)来实现。首先,你需要打开文本编辑器(如Notepad++、Sublime Text、VS Code等)或适合你的文件类型的IDE。接着,将需要整合的文件逐一打开,并复制它们的内容。然后,在一个新的文件标签页或...
怎么样把几个文件放到一个窗口
1. **使用文本编辑器**:打开文本编辑器(如Notepad++、Sublime Text、VS Code等),这些编辑器支持多标签页或拆分视图功能。将每个文件分别打开在一个标签页或视图中,通过切换标签或调整视图布局来查看不同文件内容。2. **复制粘贴合并**:将每个文件的内容复制并粘贴到一个新的文本文件中,按照需要...
在C++中如何读取文本中的数据存储为数组变量?
char *path = "S:\/1.txt"; \/\/ 这里填写你的文件路径,用‘\/’或者‘\\\\’std::ifstream ifile(path); \/\/ 打开文件 std::string line; \/\/ 用于存放从文件读取的每一行 int arr1[5], arr2[5]; \/\/ 分别存放读取到的 1,2,3,4,5 和 2,3,4,5,6 if (ifile) \/\/ 检查文件是否打...
如何使用VC++读取文件的后半部分?
读取每行信息存入CString变量 判断信息是否包含“原文大意”字符串,如果不包含,跳过 如果包含,从下一行开始存储,可以得到你要的效果
MFC读取txt数据到二维数组
一、使用二维数组 使用二维数组来读取txt文件中的数据是一个直观且易于实现的方法。假设我们有一个txt文件,其中的每一行对应数组中的一行,每一列对应数组中的一个元素。例如,文件内容如下:1 2 3 4 5 6 7 8 9 可以使用以下代码来读取并存储到二维数组:c++ include include int main() { int...
C语言中,怎样用fscanf函数输出3个文件里的内容?
EOF) { \/\/ 处理读取的数据,例如存储到数组、数据库或进行其他操作 \/\/ ...\/\/ 关闭文件 fclose(file);} } 此代码段确保正确读取每个文件中的数据,并处理这些数据。在处理完所有文件后,记得关闭所有打开的文件以释放资源。通过上述步骤,可以有效地使用fscanf函数从多个文件中读取并处理相关数据。
请问VC++(MFC)中如何读取文本文件?
}\/\/读取值 for(int i=0;i<Row;i++)data[i] = data[i]+ temp ; \/\/...你在这里修改值 fp = fopen("1.txt","w+");\/\/将文件清空 fp = fopen("1.txt","a+");\/\/将文件打开 for(int j=0;j<Row;j++)fprintf(fp,"%d\\ ",data[j]);fclose(fp); \/\/OK 了 }\/\/ 记得建...
用批处理移动多个文件到指定的多个文件夹中
在批处理脚本中,我们可以通过编写命令来实现文件的批量移动。本文将展示如何使用批处理脚本将多个文件移动到指定的多个文件夹中。首先,我们定义一个变量n,并初始化为0。接着,通过for循环读取d:\\a.txt文件中的每一行,并将其存储到名为list的数组中。数组的索引为n,因此每当读取一行时,n的值会...
C语言用fscanf()函数如何读取文件全部内容?
void read_txt(const char* Input, const char* Output){ FILE *fin = fopen(Input, "rb");\/\/以二进制读入 FILE *fout = fopen(Output, "w");unsigned char ch1,ch2;while(fscanf(fin, "%c%c", &ch1,ch2) != EOF){\/\/直到文件结束 fprintf(fout, "%d%d", ch1,ch2);\/\/以10...