按照文件修改时间遍历文件夹,进行文本连接
2012-04-24 15:57
369 查看
有一次在处理文本的时候,遇到一个尴尬的事,有几十个txt文本,是程序生成的log日志,现在领导需要审查log,哎,我当时傻得很,把这几十个txt一个一个的连接到一个文件中,当时同事打岔还差点弄错了。。。
我之前写过一篇C++中读入一个文件夹下多个文件的数据操作(文件夹遍历)
的文章,主要是介绍遍历一个文件夹下面的文件的,可是当时这方法不能按照理想的修改时间来操作文本,于是上网找了一些资料,未果。。。就自己琢磨了一下,我首先看了一下window API中的一些文件的操作,现在先给大家简单介绍一下吧,首先是_finddata_t,结构如下:
time_t time_create:
这里的time_t是一个变量类型(长整型,相当于long int),用来存储时间的,我们暂时不用理它,只要知道,这个time_create变量是用来存储文件创建时间的就可以了。
time_t time_access:文件最后一次被访问的时间。
time_t time_write:文件最后一次被修改的时间。
_fsize_t size:文件的大小。这里的_fsize_t应该可以相当于unsigned整型,表示文件的字节数。
char name[_MAX_FNAME]:文件的文件名。这里的_MAX_FNAME是一个常量宏,它在头文件中被定义,表示的是文件名的最大长度。
以上出自百度百科
之后先介绍一下基本的文件夹遍历的方法吧,还是可以参考之前写的文章C++中读入一个文件夹下多个文件的数据操作(文件夹遍历)
之后我想了想,既然可以获取文件夹下文件的名字,又看了一下_finddata_t这个结构体,发现也可以获取文件的修改时间,那么我就想着把修改时间先排序一下,再做文件夹的遍历就可以操作文件了,恩,很聪明!相信也有许多朋友都想到了!
我用到的方法是将文件名和文件的修改时间捆绑在一起做排序操作,之后进行文件的操作,话不多说了,上传代码:
以上是我做的一个文本连接工具,是按照文本修改的先后顺序进行连接的!
如果大家有什么意见或者建议请留言,谢谢!
我之前写过一篇C++中读入一个文件夹下多个文件的数据操作(文件夹遍历)
的文章,主要是介绍遍历一个文件夹下面的文件的,可是当时这方法不能按照理想的修改时间来操作文本,于是上网找了一些资料,未果。。。就自己琢磨了一下,我首先看了一下window API中的一些文件的操作,现在先给大家简单介绍一下吧,首先是_finddata_t,结构如下:
struct _finddata_t { unsigned attrib; time_t time_create; time_t time_access; time_t time_write; _fsize_t size; char name[_MAX_FNAME]; };
time_t time_create:
这里的time_t是一个变量类型(长整型,相当于long int),用来存储时间的,我们暂时不用理它,只要知道,这个time_create变量是用来存储文件创建时间的就可以了。
time_t time_access:文件最后一次被访问的时间。
time_t time_write:文件最后一次被修改的时间。
_fsize_t size:文件的大小。这里的_fsize_t应该可以相当于unsigned整型,表示文件的字节数。
char name[_MAX_FNAME]:文件的文件名。这里的_MAX_FNAME是一个常量宏,它在头文件中被定义,表示的是文件名的最大长度。
以上出自百度百科
之后先介绍一下基本的文件夹遍历的方法吧,还是可以参考之前写的文章C++中读入一个文件夹下多个文件的数据操作(文件夹遍历)
#include <iostream> #include <string> #include <fstream> #include <io.h> using namespace std; //传入文件路径及文件名,按行输出文件中内容 void GetLineAndPrint(string in_name) { ifstream fin(in_name); if(!fin) { cerr<<"open file error"<<endl; exit(-1); } string str; while(getline(fin,str)) { cout<<str<<endl; } } int main() { struct _finddata_t fileinfo; string in_path; string in_name; cin>>in_path; string curr = in_path+"\\*.txt"; long handle; if((handle=_findfirst(curr.c_str(),&fileinfo))==-1L) { cout<<"没有找到匹配文件!"<<endl; return 0; } else { in_name = in_path + "\\" + fileinfo.name ; GetLineAndPrint(in_name); while(!(_findnext(handle,&fileinfo))) { in_name = in_path + "\\" +fileinfo.name; GetLineAndPrint(in_name); } _findclose(handle); } }
之后我想了想,既然可以获取文件夹下文件的名字,又看了一下_finddata_t这个结构体,发现也可以获取文件的修改时间,那么我就想着把修改时间先排序一下,再做文件夹的遍历就可以操作文件了,恩,很聪明!相信也有许多朋友都想到了!
我用到的方法是将文件名和文件的修改时间捆绑在一起做排序操作,之后进行文件的操作,话不多说了,上传代码:
#include <iostream> #include <string> #include <fstream> #include <io.h> using namespace std; ofstream result("out.txt",ios::app);//定义全局变量,连续写文件 void WriteFile(string in_file) //写文件 { ifstream fin(in_file); string str; while(getline(fin,str)) { result<<str<<endl; } } //将文件夹下文件名和文件修改时间捆绑在一起做冒泡排序 void Bubble_Sort(long time_write_array[], string in_file_array[], int len) { int i,j; long temp; string str; for(i=0;i<len-1;i++) { for(j=0;j<len-i-1;j++) { if(time_write_array[j]>time_write_array[j+1]) { temp = time_write_array[j]; str = in_file_array[j]; time_write_array[j] = time_write_array[j+1]; in_file_array[j] = in_file_array[j+1]; time_write_array[j+1] = temp; in_file_array[j+1] = str; } } } } int main() { struct _finddata_t fileinfo; char cin_path[100];//输入文件路径 cout<<"请输入要处理的文件夹路径: "<<endl; cin>>cin_path; string in_path = cin_path; string curr = in_path+"\\*.txt"; long handle; int i = 0; int j = 0; string in_file_array[1000]; //存储输入文件的绝对路径 long time_write_array[1000]; //存储文件的修改时间 //遍历文件夹 if((handle=_findfirst(curr.c_str(),&fileinfo))==-1L) { cout<<"没有找到匹配文件!请检查配置文件路径设置,以及该路径下是否有待处理文件."<<endl; system("PAUSE"); return 0; } else { string in_file = in_path + "\\" + fileinfo.name ; in_file_array[i++] = in_file; time_write_array[j++] = fileinfo.time_write; while(!(_findnext(handle,&fileinfo))) { in_file = in_path + "\\" +fileinfo.name; in_file_array[i++] = in_file; time_write_array[j++] = fileinfo.time_write; } _findclose(handle); } Bubble_Sort(time_write_array,in_file_array,i); cout<<"\n连接的文件按先后顺利列出如下:"<<endl; //将排序好的文件进行连接操作 for(int k=0;k<i;k++) { cout<<in_file_array[k]<<endl; WriteFile(in_file_array[k]); } system("pause"); return 0; }
以上是我做的一个文本连接工具,是按照文本修改的先后顺序进行连接的!
如果大家有什么意见或者建议请留言,谢谢!
相关文章推荐
- python文件夹遍历,文件操作,获取文件修改创建时间
- java实现按照文件的修改时间排序文件夹下的文件
- iOS 通过文件的修改时间遍历整个文件夹
- python文件夹遍历,文件操作,获取文件修改创建时间
- python文件夹遍历,文件操作,获取文件修改创建时间
- python文件夹遍历,文件操作,获取文件修改创建时间
- 使用作业,每天定时将DB中信息导出到指定的文件夹中txt文本中(文件格式按照时间)
- python文件夹遍历,文件操作,获取文件修改创建时间
- python文件夹遍历,文件操作,获取文件修改创建时间<转>
- 关于os模块中的文件夹遍历,文件操作,文件的创建和修改时间的用法
- python文件夹遍历,文件操作,获取文件修改创建时间
- 获取本地文件列表后按照文件修改时间降序排列
- 修改文件(文件夹)的属性(隐藏,只读,存档,创建时间,最后访问时间,最后修改时间)
- 把文件夹下的文件按修改时间先后顺序排序
- 遍历磁盘中7天内修改过的文件,按照从新到旧打印
- python查找指定文件夹下所有文件并按修改时间倒序排列的方法
- 文件夹下所有文件按修改时间 排序
- 遍历文件夹,读取时间命名的文件
- 遍历文件夹下所有文件及文件夹,批量修改其名称
- 查看文件夹中的文件的修改时间,并从小到大排列出来到一个文件中