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