微信相冊-手機相冊等導出來的圖片及短視頻按月整理工具

最近媳婦手機滿了,把手機里的圖片、照片、視頻、微信照片等都從手機導出到電腦里,但發現太多了,而且都不知道是什麼時間的照片,特別是小孩子的照片。那做為一個程序員做了一個小小的工具,幫把圖片及文件按月份進行歸集。有助於照片歸檔。但發現各種地方生成的圖片文件名是不一樣的,第二個是用工具導出的照片創建日期是會發生變化的。這是在處理過程中的一點心得。如下是實現小小相冊文件整理工具的效果及代碼。

相冊歸集工具下載地址://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

    }
}