吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9830|回复: 59
收起左侧

[原创工具] 一款按修改时间自动创建文件夹并移入的小程序

[复制链接]
xtvott 发表于 2020-3-11 08:52
本帖最后由 xtvott 于 2020-3-12 11:00 编辑

   有时候手机里值得保存的照片、视频多了,就想分类保存在电脑里。可并不是每次从Camera相册里拷备出来我都有闲心按时间排序一个个给他归好类,并且很多时候都是隔几个月了想备份一下,有什么重要的事情记录下来了又备份一下。然后给总文件夹起个名字,方便记忆。
   这样的方式导致我有时候想找点什么照片的时候,总是在一大片照片海里用缩略图眯着眼睛找,甚至有时候错过了都不知道。直到用的时候,才发现用创建时间来归类是一件多么方便的事情。
  于是,疫情在家闲得没事的我就写了这么个小程序,一键把当前文件夹下的所有文件(仅文件)按修改时间创建文件夹,并将文件移入相应时间的文件夹下(以月为单位),查找上限为2年,每月可操作文件为200(当然,这些都可在源码里更改)。
  当然,这个对于大量文件需要归类应该也是极好的,因为只是自用,满足基本功能就没怎么去管了,如果有bug,大家可留言告诉我。以下附源码,使用vc6.0编译即可自己出程序。

这是刚开始未整理的样子

这是刚开始未整理的样子

这是程序编译好后,我在release文件夹下又放了若干修改时间不同的照片

Snipaste_2020-03-12_10-57-42.jpg
根据版主大大的要求,加了个确认选项,会提示你将要根据时间段来创建并移动文件,除了y/Y外任意键取消。

这是程序运行后的样子

这是程序运行后的样子

运行程序。。。

这是整理后的样子

这是整理后的样子

运行完后这是个样子,只留下了这个程序在文件夹外面。

这是整理后文件夹里的样子

这是整理后文件夹里的样子

这是打开了其中一个文件夹,可以看到照片全部都归类了。。

以下是源码。
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <windows.h>
//创建文件夹所需头文件
#include <io.h>
#include <direct.h>

#define YEAR 2
//存放时间,用作文件夹名
TCHAR foldername[YEAR*12][200] = {0};
int t;
void FileTimeCompare(SYSTEMTIME FileTime){
	char buf[200] = {0};
	int i, 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++;
	}
	//信息是否重复的开关,如果是则为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++;
	}
}

void Renfile(char *filename, SYSTEMTIME FileTime){
	char buf[MAX_PATH];
	char newpath[MAX_PATH];
	int i;
	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);
		}
	}
	
}
void FFind(char *path, char *myname);
void TFind(char *path, char *myname);
void main(int argc, char *argv[]){	
	char path[MAX_PATH] = {0};
	//创建文件名缓冲区
	char filename[MAX_PATH] = {0};
	char tmp;
	int i;
	//获取当前路径
	getcwd(path, MAX_PATH);
	printf("path=%s\n", path);
	
	strcat(path, "\\*.*");
	t=0;

	//第一遍,遍历所有文件,将其时间进行收集对比
	FFind(path, argv[0]);
	printf("发现%d个时间段的文件,请问是否创建相应文件夹并移入?(Y/anyKey):",t);
	scanf("%c", &tmp);
	fflush(stdin);
	if(tmp != 'y' && tmp != 'Y'){
		printf("你输入的字符为:%c,已取消操作\n", tmp);
		system("pause");
		exit(0);
	}
	//创建文件夹
	for(i=0; i<t; i++){
		if(_access(foldername[i], 0) == -1){
			_mkdir(foldername[i]);
			printf("%s\t\t文件夹已创建\n", foldername[i]);
		}	
	}

	//第二遍,遍历并移动所有文件
	TFind(path, argv[0]);
	
	printf("\n\n已移动所有文件!\n");	
	system("pause");
	//printf("当前路径为:%s\n", GetPath());
	//printf("发现创建时间为%s的文件,创建文件夹。\n",GetCreatTime());
}

void FFind(char *path, char* myname){
	//创建查找结构体
	WIN32_FIND_DATA FindFile;
	//创建查找文件句柄
	HANDLE hFind;
	char filename[MAX_PATH] = {0};
	SYSTEMTIME spec_time;

	hFind = FindFirstFile(path, &FindFile);	
	if(INVALID_HANDLE_VALUE == hFind){
		printf("创建文件查找结构体出错!\n");
		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));
}


void TFind(char *path, char *myname){
	//创建查找结构体
	WIN32_FIND_DATA RenFile;
	//创建查找文件句柄
	HANDLE tFind;
	char filename[MAX_PATH] = {0};
	SYSTEMTIME spec_time;


	tFind = FindFirstFile(path, &RenFile);
	if(INVALID_HANDLE_VALUE == tFind){
		printf("创建tFind文件查找结构体出错!\n");
		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));
}


下面是链接:
链接:https://pan.baidu.com/s/1vAQRzHAwCviQy_Btn81cqA
提取码:5vj6
复制这段内容后打开百度网盘手机App,操作更方便哦
ps:根据版主大大的要求更新了确认框
如果觉得有用,免费的C币或热心给一点啦,谢谢

免费评分

参与人数 19吾爱币 +20 热心值 +16 收起 理由
x_killua + 1 + 1 谢谢@Thanks!
aynhzwh + 1 我很赞同!
mkxjm + 1 我很赞同!
Nuan + 1 谢谢@Thanks!
Hezee + 1 我很赞同!
zthttt + 1 + 1 谢谢@Thanks!
wxzh023 + 1 + 1 我很赞同!
小不点吃鱼 + 1 + 1 很少见除了易语言的源码了
angguandianzi + 1 + 1 我很赞同!
落花看花落 + 1 + 1 很方便,您真是个人才~!!!
长夜将至 + 1 + 1 谢谢@Thanks!
中兴壹号 + 1 + 1 这个功能不错
哥斯拉的爱 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yanglinman + 1 谢谢@Thanks!
我的小苹果 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
orb001 + 1 + 1 我很赞同!
Alex_107 + 1 谢谢@Thanks!
ffdn2002 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

从塞北到江南 发表于 2020-3-12 10:04
xtvott 发表于 2020-3-11 10:58
看样子是照片相当多呀,按日整理会不会太烦琐啦,那样子文件夹一多,感觉还是眼花花的。。。

因为每天都拍了  所以想按日期整理  没事  估计我坚持100天   之后就是随便拍拍了  哈哈
 楼主| xtvott 发表于 2020-3-11 10:54
laycher 发表于 2020-3-11 09:20
不写C语言,不好改源码。。
整理照片好用,可是要放到这个目录下。

这个程序避免了自己归类,用完直接拷走或删除就可以啦。上面第八行有个注释,直接改第九行的[200]即可改变最大操作文件,改变第7行的YEAR 2这个值可以改变年数。
vigorlea 发表于 2020-3-11 08:58
roberto2001 发表于 2020-3-11 09:01
这个是好东西,需要这个
王者归来1 发表于 2020-3-11 09:02
不错,支持。
wolaiwojian 发表于 2020-3-11 09:20

感谢分享!支持
laycher 发表于 2020-3-11 09:20
不写C语言,不好改源码。。
整理照片好用,可是要放到这个目录下。
edmin 发表于 2020-3-11 09:21
归类可以,如何撤销执行的归类 的。
laycher 发表于 2020-3-11 09:23
最好改成有界面的。那就方便多了。
Alex_107 发表于 2020-3-11 09:28
谢谢楼主啦!!
ycy0536 发表于 2020-3-11 09:29
对于家里有孩子 的,非常有用,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表