Распаковка с использованием GZipStream - C#
Формулировка задачи:
Всем привет.
Поставлена задача - используя библиотеку GZipStream, осуществить Multi-Thread упаковку/распаковку.
Задача тут описывалась не раз, и не только на этом форуме, и не только на русском.
Попытался слепить все прочитанное на форумах (в т.ч. у Микрософта), и вышло нечто такое:
Выпадает ошибка - архив занят. пробовал разные файлы.
Может, свежим взглядом (или кто-то решил уже) кто-то найдет глюк, и направит в сторону решения многопоточности ?
надо заменить на
Вопрос многопоточности открыт.
Листинг программы
- public static void Decompress(string inFileName)
- {
- using (FileStream inFile = new FileStream(inFileName, FileMode.Open, FileAccess.Read))
- {
- using (GZipStream decomp = new GZipStream(inFile, CompressionMode.Decompress))
- {
- string dir = Path.GetDirectoryName(inFileName);
- string decompressionFileName = dir + Path.GetFileNameWithoutExtension(inFileName) + "_decompressed";
- Console.Write("processing...");
- int BufferSize = 8192;
- using (FileStream outStream = new FileStream(inFileName, FileMode.Create, FileAccess.Write))
- {
- int read = 0;
- byte[] buffer = new byte[BufferSize];
- while ((read = decomp.Read(buffer, 0, BufferSize)) != 0)
- {
- outStream.Write(buffer, 0, read);
- }
- outStream.Close();
- }
- decomp.Close();
- }
- inFile.Close();
- }
- }
UPDATE Ошибка найдена
inFileName
string decompressionFileName
Следующая загадка - запаковку я заимствовал тут, на форуме, и выходит так, что размеру блока запаковки равен максимальный размер распакованного по моему способу файлу...
Буду разбираться...
Решение задачи: «Распаковка с использованием GZipStream»
textual
Листинг программы
- for (j = 0; (j < multithread-1) && ((inFile.Length - inFile.Position) > BufferSize); j++)
- {
- thread[j] = new Thread(()=>
- {
- Console.Write("- {0} -", j);
- read[j] = inFile.Read(buffer, 0, BufferSize);
- inGZip.Write(buffer, 0, read[j]);
- });
- thread[j].Start();
- // Thread.Sleep(500);
- // thread[j].Join();
- thread_[j] = new Thread(() =>
- {
- // inGZip.Write(buffer, 0, read[j]);
- Console.Write("|");
- // Thread.Sleep(100);
- });
- // thread_[j].Start();
- // thread_[j].Join();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д