有时候我们希望读取一个文件夹中的所有文件,对各个文件中的数据按某种规则进行筛选,然后将筛选后的数据整合到一个文件中。这段时间正好替同事写了这一部分,在此记录下来自己的处理过程,如果有需要的朋友也可以参考下(也有很多总结不好的地方,希望大家能够批评指正,用C++语言写的)。
处理过程大致可分为如下几个部分:1、遍历文件夹,读取第一个文件。2、读取该文件内容,对其中的内容,按某个指标进行排序(如果有用到的话)。3、对处理过后的数据写入文件。
1、遍历文件夹,读取文件(对内容先不做处理):
在此使用文件信息结构体存储读取到的文件信息:
struct _finddata_t
{
unsigned attrib; //文件属性
time_t time_create; //文件创建时间
time_t time_access; //文件上一次访问时间
time_t time_write; //文件上一次修改时间
_fsize_t size; //文件字节数
char name[_MAX_FNAME]; //文件名
};
int _tmain()
{
string strPath = "C:\\Users\\CTWLPC\\Desktop\\niuniucommonrecord\\*.log";
struct _finddata_t Info;
long handle;
//读取第一个文件内容,并对其进行处理(例如排序等等)
select200Line(struct _finddata_t Info)
//函数_findfirst根据第一个参数提供的路径匹配文件,并将成功匹配的文件的信息保存在结构体Info中,同时返回下一个文件的句柄
if ((handle = _findfirst(strPath.c_str(),&Info)) == -1L)
cout << "匹配失败!\n";
cout << Info.name << " 创建时间: " <<Info.time_create<< endl;
count++;
//函数_findnext根据_findfirst返回的句柄,提取该句柄对应文件的信息保存在结构体Info中,同时返回下一个文件的句柄
while (!(_findnext(handle, &Info)))
{
cout << Info.name <<" 创建时间: "<<Info.time_create<< endl;
//读取各个文件内容,并对其进行处理(例如排序等)
select200Line(struct _finddata_t Info)
}
_findclose(handle);
}
2、读取该文件内容,对其中的内容,按某个指标进行排序(如果有用到的话)
int select200Line(struct _finddata_t Info)
{
//首先读取文件内容
string txtName = Info.name;
string filePathtempt = "C:\\Users\\CTWLPC\\Desktop\\niuniucommonrecord\\" + txtName;
ifstream readFile(filePathtempt);
char buffer[1024];//读取的原始数据
memset(buffer,0,sizeof(buffer));
while (! readFile.eof())
{
readFile.getline (buffer,1024); //读取文件一行内容到buffer[]中
readFileToVector(buffer,dataRecordVec);//因为要对其进行排序,在此,将buffer[]中的内容读到容器当中,容器中的数据类型为结构体,在此大家可以查看如何根据容器中的结构体中的某一个指标进行排序。
}
}
3、输出容器中的数值到指定文件
int outPutResult(struct _finddata_t Info)
{
ofstream writeResult;
writeResult.open("C:\\Users\\CTWLPC\\Desktop\\niuniuR.log",ios::in|ios::out|ios::app);
for (int i = 0; i < MAXLINE; i++)
{
writeResult<<dataRecordVec[i].UserType.c_str();
}
//如果有循环用到容器的话,记得在每次读写结束后对容器进行清空
vector<struct t>().swap(t);}