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

·

微信相册-手机相册等导出来的图片及短视频按月整理工具_IT业界

 

整理完效果如下:

 微信相册-手机相册等导出来的图片及短视频按月整理工具_IT业界_02

 

 

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

    }
}

·