文件夾自動歸類小程序onkeyclassification,由吾愛大神原創(chuàng)制作分享的一個實用小工具,能自動將文件按照修改創(chuàng)建日期來進行分類并聲稱對應(yīng)的文件夾,對于需要批量處理大量文件內(nèi)容的用戶來說是一個非常實用的小工具,節(jié)省文件查找時間。本次放出文件夾自動歸類小程序PC版下載。
文件夾自動歸類小程序作者說明
有時候手機里值得保存的照片、視頻多了,就想分類保存在電腦里?刹⒉皇敲看螐腃amera相冊里拷備出來我都有閑心按時間排序一個個給他歸好類,并且很多時候都是隔幾個月了想備份一下,有什么重要的事情記錄下來了又備份一下。然后給總文件夾起個名字,方便記憶。
這樣的方式導(dǎo)致我有時候想找點什么照片的時候,總是在一大片照片海里用縮略圖瞇著眼睛找,甚至有時候錯過了都不知道。直到用的時候,才發(fā)現(xiàn)用創(chuàng)建時間來歸類是一件多么方便的事情。
于是,疫情在家閑得沒事的我就寫了這么個小程序,一鍵把當(dāng)前文件夾下的所有文件(僅文件)按修改時間創(chuàng)建文件夾,并將文件移入相應(yīng)時間的文件夾下(以月為單位),查找上限為2年,每月可操作文件為200(當(dāng)然,這些都可在源碼里更改)。
文件夾自動歸類小程序源碼一覽
#include <stdio.h>
#include <windows.h>
//創(chuàng)建文件夾所需頭文件
#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\n", t);
wsprintf(buf,"%d-%d", FileTime.wYear, FileTime.wMonth);
if(t==0 &&strcmp(foldername[t], buf) != 0){
strcpy(foldername[t], buf);
t++;
}
//信息是否重復(fù)的開關(guān),如果是則為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\t\t已移動!\n", filename);
}
}
}
voidFFind(char*path,char*myname);
voidTFind(char*path,char*myname);
voidmain(intargc,char*argv[]){
charpath[MAX_PATH] = {0};
//創(chuàng)建文件名緩沖區(qū)
charfilename[MAX_PATH] = {0};
inti;
//獲取當(dāng)前路徑
getcwd(path, MAX_PATH);
printf("path=%s\n", path);
strcat(path,"\\*.*");
t=0;
//第一遍,遍歷所有文件,將其時間進行收集對比
FFind(path, argv[0]);
//創(chuàng)建文件夾
for(i=0; i<t; i++){
if(_access(foldername[i], 0) == -1){
_mkdir(foldername[i]);
printf("%s\t\t文件夾已創(chuàng)建\n", foldername[i]);
}
}
//第二遍,遍歷并移動所有文件
TFind(path, argv[0]);
printf("\n\n已移動所有文件!\n");
system("pause");
//printf("當(dāng)前路徑為:%s\n", GetPath());
//printf("發(fā)現(xiàn)創(chuàng)建時間為%s的文件,創(chuàng)建文件夾。\n",GetCreatTime());
}
voidFFind(char*path,char* myname){
//創(chuàng)建查找結(jié)構(gòu)體
WIN32_FIND_DATA FindFile;
//創(chuàng)建查找文件句柄
HANDLEhFind;
charfilename[MAX_PATH] = {0};
SYSTEMTIME spec_time;
hFind = FindFirstFile(path, &FindFile);
if(INVALID_HANDLE_VALUE == hFind){
printf("創(chuàng)建文件查找結(jié)構(gòu)體出錯!\n");
exit(0);
}
do{
if(FindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(0 !=strcmp(FindFile.cFileName,".") && 0 !=strcmp(FindFile.cFileName,"..")){
//發(fā)現(xiàn)目錄,暫不處理
}
}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){
//創(chuàng)建查找結(jié)構(gòu)體
WIN32_FIND_DATA RenFile;
//創(chuàng)建查找文件句柄
HANDLEtFind;
charfilename[MAX_PATH] = {0};
SYSTEMTIME spec_time;
tFind = FindFirstFile(path, &RenFile);
if(INVALID_HANDLE_VALUE == tFind){
printf("創(chuàng)建tFind文件查找結(jié)構(gòu)體出錯!\n");
exit(0);
}
//第二遍遍歷文件,移動文件
do{
if(RenFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
if(0 !=strcmp(RenFile.cFileName,".") && 0 !=strcmp(RenFile.cFileName,"..")){
//發(fā)現(xiàn)目錄,暫不處理
}
}else{
//找到文件并移動至已創(chuàng)建目錄
//排除自身
//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));
}