照片视频整理程序(Go语言实现)

1.需求

制作一个.exe可执行程序,对现有的文件夹及子文件夹下所有照片和视频进行解析。如果是照片,按拍摄时间年份,移动到年份文件夹;如果是视频,移动到一个文件夹下;

2.实现

选用Go语言编写程序,不需要安装运行环境,直接编译为.exe文件,终端用户直接点击.exe执行;

3.前置准备:

GO开发和编译环境执行自行百度;

4.效果:

5.代码:

package main

import (
	"fmt"
	"log"
	"os"
	"path/filepath"
	"strings"
	"time"
)

func main() {
	f, err := os.OpenFile("./errFile.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
	if err != nil {
		fmt.Printf("保存日志文件出错:%v\n", err)
		log.Fatal(err)
	}
	defer f.Close()
	//设置日志输出
	log.SetOutput(f)
	root := "." // 设置要扫描的根目录,这里使用当前目录作为示例

	err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			fmt.Printf("访问路径 %q 时出错:%v\n", path, err)
			log.Printf("访问路径 %q 时出错:%v\n", path, err)
			return nil
		}

		if !info.IsDir() && isPhotoFile(info.Name()) {
			fmt.Println("文件名:", info.Name())
			log.Println("文件名:", info.Name())
			// 获取文件的创建时间
			createTime, err := getCreateTime(path)
			year := fmt.Sprintf("%d", createTime.Year())
			if err != nil {
				fmt.Printf("获取创建时间失败:%v\n", err)
				log.Printf("获取创建时间失败:%v\n", err)
			}
			err = os.MkdirAll(year, os.ModePerm)
			if err != nil {
				fmt.Println("创建目录异常:", err)
				log.Println("创建目录异常:", err)
				return err
			}
			err = os.Rename(path, year+"/"+info.Name())
			if err != nil {
				return err
			}
			fmt.Printf("移动文件 %s 到 %s\n", path, year)
			log.Printf("移动文件 %s 到 %s\n", path, year)

		} else if !info.IsDir() && isVideoFile(info.Name()) {
			fmt.Println("文件名:", info.Name())
			log.Println("文件名:", info.Name())
			// 获取文件的创建时间
			vidoePath := "video"
			err = os.MkdirAll(vidoePath, os.ModePerm)
			if err != nil {
				fmt.Println("创建目录异常:", err)
				log.Println("创建目录异常:", err)
				return err
			}
			err = os.Rename(path, vidoePath+"/"+info.Name())
			if err != nil {
				return err
			}
			fmt.Printf("移动文件 %s 到 %s\n", path, vidoePath)
			log.Printf("移动文件 %s 到 %s\n", path, vidoePath)

		} else {
			fmt.Println("非图片视频文件名:", info.Name())
			log.Println("非图片视频文件名:", info.Name())
		}

		return nil
	})

	if err != nil {
		fmt.Printf("遍历目录出错:%v\n", err)
		log.Printf("遍历目录出错:%v\n", err)
	}
	//休眠5秒 再关闭窗口
	time.Sleep(10 * time.Second)
}

// 获取文件的创建时间(单位为秒)
func getCreateTime(filePath string) (time.Time, error) {
	fileInfo, err := os.Stat(filePath)
	if err != nil {
		return time.Time{}, err
	}
	modTime := fileInfo.ModTime()
	return modTime.Truncate(time.Second), nil
}

// 检查文件是一个 照片
func isPhotoFile(path string) bool {
	ext := strings.ToLower(filepath.Ext(path))
	for _, v := range []string{".jpg", ".jpeg", ".png", ".gif", ".nef"} {
		if v == ext {
			return true
		}
	}
	return false

}

// 检查文件是一个 视频
func isVideoFile(path string) bool {
	ext := strings.ToLower(filepath.Ext(path))
	for _, v := range []string{".mp4", ".avi", ".mov"} {
		if v == ext {
			return true
		}
	}
	return false
}

6.最终编译的程序:

点击本文标题下的【立即下载】按钮下载 photo.exe 文件

7.使用方法:

把程序和需要整理的图片文件放在同一个文件夹里面;

然后点击photo.exe文件执行

最终程序会按年份分类照片和视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值