我有个upfile文件夹有40万张图片,图片格式是按照时间格式排列的,如:2008113098.jpg 前面八位是保存图片时的日期后面两位是随机数,现在我想写个程序把这些图片按照时间的顺序放到制定的文件夹,如何完成?谢谢各位的指导。

解决方案 »

  1.   

    取文件夹下所有文件遍历,如果是jpg就取文件名前8个字符转成datetime,然后存到你想存的文件夹
      

  2.   

                string[] fileList = Directory.GetFiles(@"e:\temp\", "*.jpg");
                List<int> nameList = new List<int>();
                foreach (string fileName in fileList)
                {
                    // 严格按日期的话,10位日期整数应该是 int
                    nameList.Add(int.Parse(fileName.Substring(0, 10)));              
                }
                nameList.Sort();
                foreach (int val in nameList)
                {
                    string fileName = @"d:\temp\" +  val.ToString() + ".jpg";
                    File.Copy(fileName, @"c:\temp\" + fileName);
                }
      

  3.   

    二楼方法就可以,通过list或sortlist实现排序
      

  4.   

    40W耶,这么做估计要Out Of Memory!
      

  5.   

    算法:
    取出文件,以文件名为key,文件路径为content
    比较字符串(key)排序,然后以此存入你想要的文件夹
      

  6.   

    写了一个,按天来弄的,供参考,资源消耗要小些  public void FileAch()
            {
                string destDir = "PicAch";
                string sourDir = "yourPicDir";            string dateStr;            DateTime beginDate = new DateTime(2008, 1, 1);
                DateTime endDate = new DateTime(2008, 12, 31);            int totalDays = (int)(endDate - beginDate).TotalDays;            DirectoryInfo dirInfo = new DirectoryInfo(sourDir);            for (int i = 0; i <= totalDays; i++)
                {
                    dateStr = beginDate.AddDays(i).ToString("yyyyMMdd");
                    string dest = Path.Combine(destDir, dateStr);
                    string tar = string.Format("{0}*.*", dateStr);                FileInfo[] machedFiles = dirInfo.GetFiles(tar);                if (Directory.Exists(dest) == false)
                    {
                        Directory.CreateDirectory(dest);
                    }                foreach (FileInfo fi in machedFiles)
                    {
                        fi.MoveTo(dest);
                       // fi.CopyTo(dest);  //or copy
                    }
                }
            }