文件夹自动归类小程序onkeyclassification,由吾爱大神原创制作分享的一个实用小工具,能自动将文件按照修改创建日期来进行分类并声称对应的文件夹,对于需要批量处理大量文件内容的用户来说是一个非常实用的小工具,节省文件查找时间。本次放出文件夹自动归类小程序PC版下载。
有时候手机里值得保存的照片、视频多了,就想分类保存在电脑里。可并不是每次从Camera相册里拷备出来我都有闲心按时间排序一个个给他归好类,并且很多时候都是隔几个月了想备份一下,有什么重要的事情记录下来了又备份一下。然后给总文件夹起个名字,方便记忆。
这样的方式导致我有时候想找点什么照片的时候,总是在一大片照片海里用缩略图眯着眼睛找,甚至有时候错过了都不知道。直到用的时候,才发现用创建时间来归类是一件多么方便的事情。
于是,疫情在家闲得没事的我就写了这么个小程序,一键把当前文件夹下的所有文件(仅文件)按修改时间创建文件夹,并将文件移入相应时间的文件夹下(以月为单位),查找上限为2年,每月可操作文件为200(当然,这些都可在源码里更改)。
#include <stdio.h>
#include <windows.h>
//创建文件夹所需头文件
#include <io.h>
#include <direct.h>
#define YEAR 2
//存放时间,用作文件夹名
TCHARfoldername[YEAR*12][200] = {0};
intt;
voidFileTimeCompare(SYSTEMTIME FileTime){
charbuf[200] = {0};
inti, p;
memset(buf, 0, 200);
//printf("t=%d ", t);
wsprintf(buf,"%d-%d", FileTime.wYear, FileTime.wMonth);
if(t==0 &&strcmp(foldername[t], buf) != 0){
strcpy(foldername[t], buf);
t++;
}
//信息是否重复的开关,如果是则为1
p=0;
for(i=0; i<t; i++ ){
if(strcmp(foldername[i], buf) == 0){
p=1;
}
}
if(p==0){
strcpy(foldername[t], buf);
t++;
}
}
voidRenfile(char*filename, SYSTEMTIME FileTime){
charbuf[MAX_PATH];
charnewpath[MAX_PATH];
inti;
memset(buf, 0, MAX_PATH);
memset(newpath, 0, MAX_PATH);
wsprintf(buf,"%d-%d", FileTime.wYear, FileTime.wMonth);
for(i=0; i<t; i++){
if(strcmp(foldername[i], buf) == 0){
wsprintf(newpath,".\%s\%s", buf, filename);
if(rename(filename, newpath) == 0)
printf("%s 已移动! ", filename);
}
}
}
voidFFind(char*path,char*myname);
voidTFind(char*path,char*myname);
voidmain(intargc,char*argv[]){
charpath[MAX_PATH] = {0};
//创建文件名缓冲区
charfilename[MAX_PATH] = {0};
inti;
//获取当前路径
getcwd(path, MAX_PATH);
printf("path=%s ", path);
strcat(path,"\*.*");
t=0;
//第一遍,遍历所有文件,将其时间进行收集对比
FFind(path, argv[0]);
//创建文件夹
for(i=0; i<t; i++){
if(_access(foldername[i], 0) == -1){
_mkdir(foldername[i]);
printf("%s 文件夹已创建 ", foldername[i]);
}
}
//第二遍,遍历并移动所有文件
TFind(path, argv[0]);
printf(" 已移动所有文件! ");
system("pause");
//printf("当前路径为:%s ", GetPath());
//printf("发现创建时间为%s的文件,创建文件夹。 ",GetCreatTime());
}
voidFFind(char*path,char* myname){
//创建查找结构体
WIN32_FIND_DATA FindFile;
//创建查找文件句柄
HANDLEhFind;
charfilename[MAX_PATH] = {0};
SYSTEMTIME spec_time;
hFind = FindFirstFile(path, &FindFile);
if(INVALID_HANDLE_VALUE == hFind){
printf("创建文件查找结构体出错! ");
exit(0);
}
do{
if(FindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(0 !=strcmp(FindFile.cFileName,".") && 0 !=strcmp(FindFile.cFileName,"..")){
//发现目录,暂不处理
}
}else{
//找到文件,查看其最后一次修改日期
//排除自身
getcwd(filename, MAX_PATH);
strcat(filename,"\");
strcat(filename, FindFile.cFileName);
if(strcmp(filename, myname) != 0){
FileTimeToSystemTime(&FindFile.ftLastWriteTime, &spec_time);
FileTimeCompare(spec_time);
}
}
}while(FindNextFile(hFind, &FindFile));
}
voidTFind(char*path,char*myname){
//创建查找结构体
WIN32_FIND_DATA RenFile;
//创建查找文件句柄
HANDLEtFind;
charfilename[MAX_PATH] = {0};
SYSTEMTIME spec_time;
tFind = FindFirstFile(path, &RenFile);
if(INVALID_HANDLE_VALUE == tFind){
printf("创建tFind文件查找结构体出错! ");
exit(0);
}
//第二遍遍历文件,移动文件
do{
if(RenFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(0 !=strcmp(RenFile.cFileName,".") && 0 !=strcmp(RenFile.cFileName,"..")){
//发现目录,暂不处理
}
}else{
//找到文件并移动至已创建目录
//排除自身
//strcpy(filename, getcwd(path, MAX_PATH));
getcwd(filename, MAX_PATH);
strcat(filename,"\");
strcat(filename, RenFile.cFileName);
if(strcmp(filename, myname) != 0){
FileTimeToSystemTime(&RenFile.ftLastWriteTime, &spec_time);
Renfile(RenFile.cFileName, spec_time);
}
}
}while(FindNextFile(tFind, &RenFile));
}