Распаковка с использованием 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д