Пример #1
0
        private void InspectFiles(List <string> fileNames)
        {
            var threads = new List <Thread>();

            foreach (var fileName in fileNames)
            {
                var finfo = new FileInfo(fileName);

                if (pcapReader.CanRead(fileName))
                {
                    var reader          = new PCAPReader();
                    var fileReadObjects = reader.Read(fileName);
                    var first           = (PCAPBlock)fileReadObjects.First().ReadObject;
                    var last            = (PCAPBlock)fileReadObjects.Last().ReadObject;

                    var dsource = new DataSource
                    {
                        FileInfo   = finfo,
                        StartTime  = first.DateTime,
                        EndTime    = last.DateTime,
                        SourceType = SourceType.PCAP,
                        Packets    = fileReadObjects.Count
                    };
                    UpdateList(dsource);
                    continue;
                }
                else if (pcapngReader.CanRead(fileName))
                {
                    var reader          = new PCAPNGReader();
                    var fileReadObjects = reader.Read(fileName);
                    var first           = (PCAPNGBlock)fileReadObjects.First().ReadObject;
                    var last            = (PCAPNGBlock)fileReadObjects.Last().ReadObject;
                    var dsource         = new DataSource
                    {
                        FileInfo   = finfo,
                        StartTime  = first.Timestamp,
                        EndTime    = last.Timestamp,
                        SourceType = SourceType.PCAPNG,
                        Packets    = fileReadObjects.Count
                    };
                    UpdateList(dsource);
                    continue;
                }

                if (SevenZipArchive.IsSevenZipFile(fileName))
                {
                    // because of lousy performance when operating on 7zip, we launch a new thread instead of using tasks
                    var thread = new Thread(() => DoSevenZip(finfo));
                    thread.Start();
                    threads.Add(thread);


                    continue;
                }

                // zip performance is much better and we will not thread
                DoZip(finfo);
            }

            UpdateList("Waiting for all threads to finish");
            foreach (Thread thread in threads)
            {
                thread.Join();
            }

            UpdateList("All threads finished");
        }