zoukankan      html  css  js  c++  java
  • 微信相册-手机相册等导出来的图片及短视频按月整理工具

    最近媳妇手机满了,把手机里的图片、照片、视频、微信照片等都从手机导出到电脑里,但发现太多了,而且都不知道是什么时间的照片,特别是小孩子的照片。那做为一个程序员做了一个小小的工具,帮把图片及文件按月份进行归集。有助于照片归档。但发现各种地方生成的图片文件名是不一样的,第二个是用工具导出的照片创建日期是会发生变化的。这是在处理过程中的一点心得。如下是实现小小相册文件整理工具的效果及代码。

    相册归集工具下载地址:https://files.cnblogs.com/files/spring_wang/xiaowu-%E7%9B%B8%E5%86%8C%E5%B7%A5%E5%85%B7.zip

    整理完效果如下:

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace xiaowu_相册工具
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (MessageBox.Show("确认此次整理?", "此整理不可恢复", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
    
    
                    string timeStamp;//时间戳
                    DateTime? tempDateTime = null;
                    string yy, mm, pathyymm;
                    string path = txtPath.Text.Trim();
                    List<FileInfo> list = GetFiles(path, "");
    
                    foreach (FileInfo item in list)
                    {
                        tempDateTime = null;
                        if (chbRule.Checked)
                        {
                            //整理
                            if (item.Name.Length > 12)
                            {
                                timeStamp = "";
                                //规则3 :wx_camera_1573717083086(1)
                                if (item.Name.Substring(0,10).Equals("wx_camera_"))
                                {
                                    timeStamp = item.Name.Substring(10, 13);
    
                                }//规则2 :mmexport1576730661485(1)
                                else if (item.Name.Substring(0, 8).Equals("mmexport")) {
                                    timeStamp = item.Name.Substring(8, 13);
    
                                }//规则5 :MYXJ_20191023143204_fast 
                                else if (item.Name.Substring(0, 5).Equals("MYXJ_"))
                                {
                                    timeStamp = item.Name.Substring(5, 8);
                                    //tempDateTime = Convert.ToDateTime(timeStamp);
                                    tempDateTime = DateTime.ParseExact(timeStamp, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
                                    timeStamp = "";
    
                                }//规则4 :IMG20190816103544
                                else if (item.Name.Substring(0, 3).Equals("IMG"))
                                {
                                    timeStamp = item.Name.Substring(3, 8);
                                    //tempDateTime = DateTime.Parse(timeStamp);
                                    tempDateTime = DateTime.ParseExact(timeStamp, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
                                    timeStamp = "";
                                }
                                else
                                {
                                    //规则1 :1569916767163(1)
                                    timeStamp = item.Name.Substring(0, 13);
                                }
                                if ( !timeStamp.Equals(""))
                                {
                                    try
                                    {
                                        tempDateTime = StampToDateTime(timeStamp);
                                    }
                                    catch (Exception)
                                    {
    
                                        tempDateTime = null;
                                    }
                                    
                                    
                                }
    
                               
                                
                            }
                        }
                        else
                        {
                            //按创建日期整理
                            tempDateTime = item.LastWriteTime;
                            
                        }
    
                        //整理文件
                        if (tempDateTime != null)
                        {
                            yy = Convert.ToDateTime(tempDateTime).Year.ToString();
                            mm = Convert.ToDateTime(tempDateTime).Month.ToString();
                            pathyymm = path + ("/" + yy + "-" + mm);
                            //判断文件夹
                            if (System.IO.Directory.Exists(pathyymm) == false)//如果不存在就创建file文件夹
                            {
                                System.IO.Directory.CreateDirectory(pathyymm);
                            }
                            //判断文件的存在
                            if (System.IO.File.Exists(pathyymm + "/" + item.Name))
                            {
                                //存在文件
                            }
                            else
                            {
                                item.MoveTo(Path.Combine(pathyymm, item.Name));
                            }
                        }
                        
                    }
    
                }
                
            }
    
            #region 获得目录下所有文件或指定文件类型文件(包含所有子文件夹)
            /// <summary>
             /// 获得目录下所有文件或指定文件类型文件(包含所有子文件夹)
             /// </summary>
             /// <param name="path">文件夹路径</param>
             /// <param name="extName">扩展名可以多个 例如 .mp3.wma.rm</param>
             /// <returns>List<FileInfo></returns>
             public List<FileInfo> GetFiles(string path, string extName)
             {
                 try
                 {
                     List<FileInfo> lst = new List<FileInfo>();
                     string[] dir = Directory.GetDirectories(path); //文件夹列表   
                     DirectoryInfo fdir = new DirectoryInfo(path);
                     FileInfo[] file = fdir.GetFiles();
                     //FileInfo[] file = Directory.GetFiles(path); //文件列表   
                     if (file.Length != 0 || dir.Length != 0) //当前目录文件或文件夹不为空                   
                     {
                         foreach (FileInfo f in file) //显示当前目录所有文件   
                         {
                             //if (extName.ToLower().IndexOf(f.Extension.ToLower()) >= 0)
                             //{
                                 lst.Add(f);
                             //}
                         }
                         //foreach (string d in dir)
                         //{
                         //    getFile(d, extName);//递归   
                         //}
                     }
                     return lst;
                 }
                 catch (Exception ex)
                 {   
                     throw ex;
                 }
             }
            #endregion
    
            #region 时间戳转换方法
             // 时间戳转为格式
             public DateTime StampToDateTime(string timeStamp)
             {
                 DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                 long lTime = long.Parse(timeStamp + "0000");
                 TimeSpan toNow = new TimeSpan(lTime);
                 return dateTimeStart.Add(toNow);
             }
            #endregion
    
        }
    }
  • 相关阅读:
    c++ STL
    unix network programming(3rd)Vol.1 [第1章]《读书笔记系列》
    [面试题] BloomFilter 无序40亿不重复 uint 整数, 给予任意的数,求是否在这40亿之中 + 无序数组中找2个相同的值
    stm32 DAC输出音频
    Go语言项目的错误和异常管理 via 达达
    值传递
    FireFox、chrome通过插件使用IE内核,IE Tab v2
    linux cross toolsChain 交叉编译 ARM(转)
    rfc all download
    VS2005 工程在win7下使用管理员权限运行
  • 原文地址:https://www.cnblogs.com/spring_wang/p/12955696.html
Copyright © 2011-2022 走看看