Распаковка с использованием GZipStream - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Поставлена задача - используя библиотеку GZipStream, осуществить Multi-Thread упаковку/распаковку. Задача тут описывалась не раз, и не только на этом форуме, и не только на русском. Попытался слепить все прочитанное на форумах (в т.ч. у Микрософта), и вышло нечто такое:
Листинг программы
  1. public static void Decompress(string inFileName)
  2. {
  3. using (FileStream inFile = new FileStream(inFileName, FileMode.Open, FileAccess.Read))
  4. {
  5. using (GZipStream decomp = new GZipStream(inFile, CompressionMode.Decompress))
  6. {
  7. string dir = Path.GetDirectoryName(inFileName);
  8. string decompressionFileName = dir + Path.GetFileNameWithoutExtension(inFileName) + "_decompressed";
  9. Console.Write("processing...");
  10. int BufferSize = 8192;
  11. using (FileStream outStream = new FileStream(inFileName, FileMode.Create, FileAccess.Write))
  12. {
  13. int read = 0;
  14. byte[] buffer = new byte[BufferSize];
  15. while ((read = decomp.Read(buffer, 0, BufferSize)) != 0)
  16. {
  17. outStream.Write(buffer, 0, read);
  18. }
  19. outStream.Close();
  20. }
  21. decomp.Close();
  22. }
  23. inFile.Close();
  24. }
  25. }
Выпадает ошибка - архив занят. пробовал разные файлы. Может, свежим взглядом (или кто-то решил уже) кто-то найдет глюк, и направит в сторону решения многопоточности ?
UPDATE Ошибка найдена
inFileName
надо заменить на
string decompressionFileName
Вопрос многопоточности открыт.
Следующая загадка - запаковку я заимствовал тут, на форуме, и выходит так, что размеру блока запаковки равен максимальный размер распакованного по моему способу файлу... Буду разбираться...

Решение задачи: «Распаковка с использованием GZipStream»

textual
Листинг программы
  1. for (j = 0; (j < multithread-1) && ((inFile.Length - inFile.Position) > BufferSize); j++)
  2.                                 {                                
  3.                                     thread[j] = new Thread(()=>
  4.                                     {
  5.                                         Console.Write("- {0} -", j);
  6.                                         read[j] = inFile.Read(buffer, 0, BufferSize);
  7.                                         inGZip.Write(buffer, 0, read[j]);
  8.                                     });                                  
  9.                                     thread[j].Start();
  10.                                //     Thread.Sleep(500);
  11.  
  12.                                     //       thread[j].Join();
  13.  
  14.                                     thread_[j] = new Thread(() =>
  15.                                     {
  16.                                      //       inGZip.Write(buffer, 0, read[j]);
  17.                                             Console.Write("|");
  18.                                           //  Thread.Sleep(100);
  19.                                     });
  20.                                 //    thread_[j].Start();
  21.                                //     thread_[j].Join();
  22.  
  23.                                 }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут