예제 #1
0
        public bool Decompress(string archivedFile, string unarchivedFile)
        {
            var fileInfo = new FileInfo(archivedFile);

            ReadChunkCount(fileInfo);
            new Thread(() => { ReadArchivedFile(fileInfo); }).Start();
            var writeThread = new Thread(() => { WriteUnarchivedFile(unarchivedFile); });

            writeThread.Start();
            using (var pool = new CustomThreadPool(_threadAmount - 2))
            {
                var res = true;
                while (res && _result)
                {
                    pool.QueueTask(RunDecompressor);
                    _decompressedCount++;
                    if (_decompressedCount >= _fileChunkCount)
                    {
                        res = false;
                    }
                }
                if (!_result)
                {
                    pool.Abort();
                }
            }
            writeThread.Join();
            return(_result);
        }
예제 #2
0
        public bool Compress(string fileToArchive, string archivedFile)
        {
            var fileInfo = new FileInfo(fileToArchive);

            _fileChunkCount = (int)Math.Ceiling((decimal)fileInfo.Length / _chunkSize);

            var writeThread = new Thread(() => { StartArchiveWriter(archivedFile); });

            writeThread.Start();
            using (var pool = new CustomThreadPool(_threadAmount - 1))
            {
                /*pool.QueueTask(() => { StartArchiveWriter(archivedFile); });*/
                var idx = 0;
                if (!_result)
                {
                    pool.Abort();
                }
                while (idx <= _fileChunkCount && _result)
                {
                    Console.WriteLine("fileChunkCount: {0} chunkIndexWritten: {1}", _fileChunkCount, _chunkIndexWritten);
                    pool.QueueTask(() => { ArchivedByChunk(fileInfo); });
                    idx++;
                }
            }
            writeThread.Join();
            return(_result);
        }