示例#1
0
        private void Init()
        {
            Dictionary <string, List <FileInfo> > fileContainer = new Dictionary <string, List <FileInfo> >();
            string folder                 = "fin\\";
            var    drivers                = Environment.GetLogicalDrives();
            int    single                 = 0;
            int    duplicate              = 0;
            int    total                  = 0;
            long   totalSize              = 0;;
            long   singleSize             = 0;
            long   duplicateSize          = 0;
            List <CheckDuplcateModel> res = new List <CheckDuplcateModel>();

            foreach (var driver in drivers)
            {
                string targetFolder = driver + folder;

                if (Directory.Exists(targetFolder))
                {
                    var files = Directory.GetFiles(targetFolder);

                    foreach (var file in files)
                    {
                        FileInfo fi            = new FileInfo(file);
                        var      fileSplitName = fi.Name.Split('-');

                        if (fileSplitName.Length >= 3)
                        {
                            var key = fileSplitName[0] + "-" + fileSplitName[1] + "-" + fileSplitName[2];

                            if (fileContainer.ContainsKey(key))
                            {
                                fileContainer[key].Add(fi);
                            }
                            else
                            {
                                fileContainer.Add(key, new List <FileInfo>()
                                {
                                    fi
                                });
                            }
                        }
                    }
                }
            }

            foreach (var key in fileContainer)
            {
                if (key.Value.Count > 1)
                {
                    duplicate++;
                    total++;

                    CheckDuplcateModel cdm   = new CheckDuplcateModel();
                    List <string>      files = new List <string>();

                    cdm.ContainsFiles = files;
                    cdm.Key           = key.Key;

                    int  currentIndex = 0;
                    bool isExpend     = false;
                    var  first        = key.Value.FirstOrDefault();
                    var  firstFolder  = first.DirectoryName[0];
                    var  currentSize  = first.Length;

                    foreach (var fi in key.Value)
                    {
                        cdm.ContainsFiles.Add(fi.FullName);
                        var file     = fi.FullName;
                        var fileName = fi.Name;
                        var fileSize = fi.Length;

                        duplicateSize += fileSize;
                        totalSize     += fileSize;

                        if (fi.DirectoryName[0] != firstFolder)
                        {
                            isExpend = true;
                        }

                        if (fi.Length > currentSize)
                        {
                            currentSize = fi.Length;
                            cdm.Biggest = currentIndex;
                        }

                        currentIndex++;
                    }

                    cdm.IsExpend = isExpend;

                    if (cdm.IsExpend == false)
                    {
                        cdm.Biggest = -1;
                    }

                    res.Add(cdm);
                }
                else
                {
                    var fi = key.Value.FirstOrDefault();

                    var file     = fi.FullName;
                    var fileName = fi.Name;
                    var fileSize = fi.Length;

                    single++;
                    total++;
                    singleSize += fi.Length;
                    totalSize  += fileSize;
                }
            }

            var logFolder = "c:\\setting\\checkresult\\";
            var logFile   = logFolder + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".json";

            if (Directory.Exists(logFolder))
            {
                Directory.Delete(logFolder);
            }

            Directory.CreateDirectory(logFolder);

            File.Create(logFile).Close();

            StreamWriter sw = new StreamWriter(logFile);

            sw.WriteLine(JsonConvert.SerializeObject(res));
            sw.Close();
        }
示例#2
0
        static void Main(string[] args)
        {
            Dictionary <string, List <FileInfo> > fileContainer = new Dictionary <string, List <FileInfo> >();
            string folder                 = "fin\\";
            var    drivers                = Environment.GetLogicalDrives();
            int    single                 = 0;
            int    duplicate              = 0;
            int    total                  = 0;
            long   totalSize              = 0;;
            long   singleSize             = 0;
            long   duplicateSize          = 0;
            List <CheckDuplcateModel> res = new List <CheckDuplcateModel>();

            foreach (var driver in drivers)
            {
                Console.WriteLine("正在处理驱动器 --> " + driver);

                string targetFolder = driver + folder;

                if (Directory.Exists(targetFolder))
                {
                    Console.WriteLine("\t找到目标文件夹 --> " + targetFolder);

                    var files = Directory.GetFiles(targetFolder);

                    Console.WriteLine("\t共有 --> " + files.Count() + " 个文件");

                    foreach (var file in files)
                    {
                        FileInfo fi            = new FileInfo(file);
                        var      fileSplitName = fi.Name.Split('-');

                        if (fileSplitName.Length >= 3)
                        {
                            var key = fileSplitName[0] + "-" + fileSplitName[1] + "-" + fileSplitName[2];

                            if (fileContainer.ContainsKey(key))
                            {
                                fileContainer[key].Add(fi);
                            }
                            else
                            {
                                fileContainer.Add(key, new List <FileInfo>()
                                {
                                    fi
                                });
                            }
                        }
                    }
                }
            }

            foreach (var key in fileContainer)
            {
                Console.WriteLine("处理 --> " + key.Key);

                if (key.Value.Count > 1)
                {
                    duplicate++;
                    total++;

                    CheckDuplcateModel cdm   = new CheckDuplcateModel();
                    List <string>      files = new List <string>();

                    cdm.ContainsFiles = files;
                    cdm.Key           = key.Key;

                    foreach (var fi in key.Value)
                    {
                        cdm.ContainsFiles.Add(fi.FullName);
                        var file     = fi.FullName;
                        var fileName = fi.Name;
                        var fileSize = fi.Length;

                        duplicateSize += fileSize;
                        totalSize     += fileSize;

                        Console.WriteLine("\t******" + file);
                    }

                    res.Add(cdm);
                }
                else
                {
                    var fi = key.Value.FirstOrDefault();

                    var file     = fi.FullName;
                    var fileName = fi.Name;
                    var fileSize = fi.Length;

                    single++;
                    total++;
                    singleSize += fi.Length;
                    totalSize  += fileSize;

                    Console.WriteLine("\t-----" + file);
                }
            }

            Console.WriteLine(string.Format("总数量 -> {0}", total));
            Console.WriteLine(string.Format("独立AV数量-> {0}", single));
            Console.WriteLine(string.Format("存在重复可能的AV数量-> {0},", duplicate));
            Console.WriteLine(string.Format("总大小-> {0},", FileSize.GetAutoSizeString(totalSize, 2)));
            Console.WriteLine(string.Format("独立AV大小-> {0},", FileSize.GetAutoSizeString(singleSize, 2)));
            Console.WriteLine(string.Format("存在重复可能的AV大小-> {0}", FileSize.GetAutoSizeString(duplicateSize, 2)));

            var logFolder = "c:\\setting\\checkresult\\";
            var logFile   = logFolder + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".json";

            if (!Directory.Exists(logFolder))
            {
                Directory.CreateDirectory(logFolder);
            }


            File.Create(logFile).Close();

            StreamWriter sw = new StreamWriter(logFile);

            sw.WriteLine(JsonConvert.SerializeObject(res));
            sw.Close();

            Console.ReadKey();
        }