Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
mihaprad
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60
#1

Как распаковать из xlsx в xml с использованием zlib?

03.06.2015, 15:32. Просмотров 754. Ответов 4
Метки нет (Все метки)

Заранее благодарен за вашу любую помощь!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2015, 15:32
Ответы с готовыми решениями:

Как распаковать архив ZLib C++
Даже в документации офф. сайта, и в и примере ничего не понятно. Надо написать...

Как установить zlib для VS 2010?
Нормального ответа тут не нашел.

Как открыть файл xlsx и сохранить в txt?
Написать консольное windows приложение на Visual C++ со следующим функционалом:...

Как программно распаковать ISO (образ диска)?
Как программно распаковать ISO (образ диска) с выбором того, что именно нужно...

Распаковать файл zlib
Здраствуйте. Есть swf файл который не могу декомпилировать так как он...

4
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
03.06.2015, 18:36 #2
zlib же, насколько я помню, не понимает сам формат zip-архива.
0
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
03.06.2015, 19:21 #3
Лучший ответ Сообщение было отмечено mihaprad как решение

Решение

Чем примеры с оф.сайта не устраивают?

Разбираете (локальный) заголовок ZIP и скармливаете inflate сам Zip-stream. Сжатый поток читаете в цикле, до исчерпания, распакованный пишете куда следует.

Не по теме:

Мой распаковщик так потрошит электронные книжки.


Примерно, так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
int main(int argc,char** argv)
{
   if (argc != 2)
   {
      ShowHelp();
      return 0;
   }
 
   // Open eBook File
   MMF      eBook;
 
   if (!eBook.OpenReadOnly(argv[1]))
   {
      // Error !
      printf("Can't open file [%s]\n",argv[1]);
      return -1;
   }
 
   // Do Actual Work
   const DWORD    dwPKZipSigz = 0x04034B50;
 
   bool     bFound = false;
 
   QuickSearch((BYTE*)&dwPKZipSigz,sizeof(DWORD),eBook.Buffer(),eBook.Size() - sizeof(dwPKZipSigz),&bFound,Finder);
 
   // Append false last entry
   dwOfsArr[iCnt++] = eBook.Size();
 
   char     pszZip      [_MAX_PATH];
   char     pszDrive    [_MAX_DRIVE];
   char     pszDir      [_MAX_DIR];
   char     pszFName    [_MAX_FNAME];
   char     pszExt      [_MAX_EXT];
 
   _splitpath(argv[1],pszDrive,pszDir,pszFName,pszExt);
 
   printf("Total records: %d\n\n",iCnt - 1);
 
   for (int ii = 0; ii < (iCnt - 1); ++ii)
   {
      // Get Header
      ZIP_LOCAL_FILE_HEADER*     pLFHeader = (ZIP_LOCAL_FILE_HEADER*)(eBook.Buffer() + dwOfsArr[ii]);
 
      BYTE     pOut[USHRT_MAX];  // I hope, it is enough !
 
      memset(pOut,0,sizeof(pOut));
      
      char     pszTemp[MAX_PATH];
 
      wsprintf(pszTemp,"%s_%03d",pszFName,ii + 1);
      _makepath(pszZip,pszDrive,pszDir,pszTemp,"HTM");
 
      HANDLE      hFile = CreateFile(pszZip);
 
      if (hFile == INVALID_HANDLE_VALUE)
      {
         // Error !
         printf("Can't create file [%s]\n",pszZip);
         continue;
      }
 
      z_stream    ZipStream;
 
      memset(&ZipStream,0,sizeof(ZipStream));
 
      int   iErr = 0;
      
      iErr = inflateInit2(&ZipStream,-MAX_WBITS);
 
      if (iErr != Z_OK)
      {
         printf("INFLATEINIT2 Err %d,%s\n",ZipStream.msg);
      }
 
      BYTE*    pSrc = eBook.Buffer() + dwOfsArr[ii] + sizeof(ZIP_LOCAL_FILE_HEADER) + pLFHeader->_wFilenameLen + pLFHeader->_wExtraLen;
 
      ZipStream.next_in  = pSrc;
      ZipStream.avail_in = pLFHeader->_dwPackSize;
 
      ZipStream.next_out  = pOut;
      ZipStream.avail_out = USHRT_MAX;
 
      iErr = inflate(&ZipStream,Z_SYNC_FLUSH);
 
      if ((iErr != Z_OK) && (iErr != Z_STREAM_END))
      {
         printf("INFLATE Err %d,%s\n",iErr,ZipStream.msg);
      }
 
      WriteBuffer(hFile,pOut,pLFHeader->_dwOrgSize);
 
      iErr = inflateEnd(&ZipStream);
 
      if (iErr != Z_OK)
      {
         printf("INFLATEEND Err %d,%s\n",ZipStream.msg);
      }
 
      CloseHandle(hFile);
      hFile = INVALID_HANDLE_VALUE;
   }  
 
   // Cleanup
   eBook.Close();
 
   return 0;
}
1
mihaprad
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60
03.06.2015, 19:40  [ТС] #4
Цитата Сообщение от nmcf Посмотреть сообщение
zlib же, насколько я помню, не понимает сам формат zip-архива.
наоборот, понимает
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
03.06.2015, 21:16 #5
Цитата Сообщение от mihaprad Посмотреть сообщение
наоборот, понимает
Это unrar понимает файл целиком, а здесь нужно извлечь тот самый Zip-stream, о котором gazlan написал.
1
03.06.2015, 21:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2015, 21:16

Распаковать zlib из сторки
По сети получаю от клиента такую строку &lt;data&gt;x┌ïV≥p⌡±±W╥⌐V*⌐,HU▓é±òJ╙ü&lt;#C...

Как с использованием 7-Zip запаковать файлы и каталоги в архив и распаковать их из архива?
Научите меня 7z паковать! Документация выводится в консоль, но всё же пробами...

Как загрузить содержимое файла xlsx с использованием OpenFileDialog в RichTextBox или ListBox
Такая проблема.. Не могу найти информацию как загрузить содержимое файла xlsx с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru