微信相冊-手機相冊等導出來的圖片及短視頻按月整理工具
- 2020 年 6 月 16 日
- 筆記
- [02]winform系列, [18]微信開發系列
最近媳婦手機滿了,把手機里的圖片、照片、視頻、微信照片等都從手機導出到電腦里,但發現太多了,而且都不知道是什麼時間的照片,特別是小孩子的照片。那做為一個程序員做了一個小小的工具,幫把圖片及文件按月份進行歸集。有助於照片歸檔。但發現各種地方生成的圖片文件名是不一樣的,第二個是用工具導出的照片創建日期是會發生變化的。這是在處理過程中的一點心得。如下是實現小小相冊文件整理工具的效果及代碼。
相冊歸集工具下載地址://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 } }