На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Наши Исходники"
Раздел предназначен для публикации различных исходников и программных решений (в виде исходных текстов), которые Вы считаете достойными внимания и/или интересными. Язык исходника значения не имеет. Это может быть C/C++, Pascal, Perl, PHP, C#, Foth, Prolog или любой другой существующий язык программирования. Единственный момент – в названии темы этот язык должен быть указан. Например, «[C++] Представление чисел в римской записи». Сам исходный текст должен содержаться в первом посте темы. Если исходник занимает не больше одного-двух экранов, то допустимо его публикация непосредственно в посте. Иначе исходный текст должен быть прикреплен к посту в виде архива. Кроме того, первый пост должен содержать:

- Информацию о платформе/компиляторе, для которых предназначен исходный текст (если эта информация существенна)
- Ссылку на оригинал и автора (если публикуется чужой исходный текст)
- Максимально подробное описание – какую задачу решает опубликованный исходный текст, и чем он интересен.

Плагиат крайне не приветствуется. Также не приветствуется публикация исходных текстов вирусов, крэков и т. п. информации. Это элементарно противозаконно.

Для быстрого поиска нужного исходника можно воспользоваться навигатором:
Быстрый поиск по разделу
Модераторы: Flex Ferrum
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> [C++] Распаковка zip файла средствами Windows XP, WinAPI
    Под пустым подразумевается файл из одного заголовка из 4-х байтов.
    Сообщение отредактировано: Jenya -
    Фтп клиент для локальных сетей :
    Ftp_Manager
      Цитата Jenya @
      Под пустым подразумевается файл из одного заголовка из 4-х байтов.

      Цитата Jenya @
      "PK" + '\x03' + '\x04'


      Пробовал так, но не помогло
      ExpandedWrap disabled
        fstream zip_file("C:\\New2.zip", ios::out);
        char buff_line[10]="";
        sprintf(buff_line, "PK%c%c\n", '\x03', '\x04');
        zip_file.write(buff_line,lstrlen(buff_line));
        if(zip_file.is_open() == 0) return 0;
        zip_file.close();


      при копировании в архив пишет что архив поврежден, или имеет не правильный формат

      вверху я приводил ссылку на заголовок и символы в пустом ZIP архиве создаваемом Windows, либо WinRAR заголовок должен отличаться от этого?
        тут вот тоже пишут о задержки, хоть и для шарпа

        Ziping a file using the Windows Shell API creates another thread where the zipping is executed.This means that it is possible that this console app would end before the zipping thread starts to execute which would cause the zip to never occur and you will end up with just an empty zip file. So wait a second and give the zipping thread time to get started
        Сообщение отредактировано: VSV -
          можно ли через WaitForExit подождать?
            Для WaitFor нужен хэндл обьекта.
            Фтп клиент для локальных сетей :
            Ftp_Manager
              А как тогда можно дождаться завершения?
                Оказывается при копировании файла тут
                ExpandedWrap disabled
                  pOutFolder->Release();

                происходит задержка, в принципе можно довольствоваться этим)
                  Посмотри вот здесь :

                  http://www.autohotkey.com/forum/topic19789.html+dll

                  Тут вроде тайм-аута нету.
                  Фтп клиент для локальных сетей :
                  Ftp_Manager
                    Обнаружилась такая проблемка при многократном перезапуске извлечения для одного архива, либо при распаковывании архива в котором больше 100 файлов вылетает окошко - Файл существует
                    Причина - в папке C:\Documents and Settings\{USER_NAME}\Local Settings\Temp генерируются для каждого файла папки с именами Временная папка {НОМЕР} для {ИМЯ_АРХИВА}.zip
                    Когда НОМЕР становится больше 99 то начинает выскакивать это окошко и разархивирования не происходит

                    видимо надо чистить эти папки ручками) Но судя по тому что для копирования запускается несколько потоков для нескольких файлов - если судить по выскакивающим окошкам копирования, то это становиться не слишком тривиально, т.к. есть вероятность затереть еще не скопированный файл, хотя не знаю))) может и не так


                    Еще вопрос - при извлечении выскакивает окошко копирования файлов с кнопкой отмены, которую может нажать юзер, как то не показывать это окошко можно?
                    Сообщение отредактировано: VSV -
                      Цитата

                      Folder.CopyHere(vItem [, vOptions])
                      Parameters

                      vItem Required. The item or items to copy. This can be a string that represents a file name, a FolderItem object, or a FolderItems object.
                      vOptions Optional. Options for the copy operation. This value can be zero or a combination of the following values. These values are based upon flags defined for use with the fFlags member of the C++ SHFILEOPSTRUCT structure. These flags are not defined as such for Microsoft Visual Basic, Visual Basic Scripting Edition (VBScript), or Microsoft JScript, so you must define them yourself or use their numeric equivalents.4 Do not display a progress dialog box.
                      8 Give the file being operated on a new name in a move, copy, or rename operation if a file with the target name already exists.
                      16 Respond with "Yes to All" for any dialog box that is displayed.
                      64 Preserve undo information, if possible.
                      128 Perform the operation on files only if a wildcard file name (*.*) is specified.
                      256 Display a progress dialog box but do not show the file names.
                      512 Do not confirm the creation of a new directory if the operation requires one to be created.
                      1024 Do not display a user interface if an error occurs.
                      2048 Version 4.71. Do not copy the security attributes of the file.
                      4096 Only operate in the local directory. Don't operate recursively into subdirectories.
                      9182 Version 5.0. Do not copy connected files as a group. Only copy the specified files.


                      Наводит на мысль, что в основе CopyHere лежит SHFileOperation, однако работать с помощью SHFileOperation с виртуальными zip папками нельзя.


                      Кстати вот так создается пустой zip файл в примере : http://www.robvanderwoude.com/vbstech_files_zip.html
                      Там кстати Sleep 200 делается.

                      Цитата

                      ' Create an empty ZIP file
                      Set objFSO = CreateObject( "Scripting.FileSystemObject" )
                      Set objTxt = objFSO.OpenTextFile( myZipFile, ForWriting, True )
                      objTxt.Write "PK" & Chr(5) & Chr(6) & String( 18, Chr(0) )
                      objTxt.Close
                      Set objTxt = Nothing
                      Set objFSO = Nothing
                      Сообщение отредактировано: Jenya -
                      Фтп клиент для локальных сетей :
                      Ftp_Manager
                        Цитата Jenya @
                        Кстати вот так создается пустой zip файл в примере : http://www.robvanderwoude.com/vbstech_files_zip.html

                        У меня так вот получилось
                        ExpandedWrap disabled
                            FILE * f1;
                            f1 = fopen("C:\\New.zip", "wb");
                            char buff_line[22]="";
                            sprintf(buff_line, "PK\x5\x6");
                            int n = 1;
                            fwrite(buff_line, sizeof(buff_line), n, f1);
                            fclose(f1);
                          Цитата

                          Обнаружилась такая проблемка при многократном перезапуске извлечения для одного архива, либо при распаковывании архива в котором больше 100 файлов вылетает окошко - Файл существует
                          Причина - в папке C:\Documents and Settings\{USER_NAME}\Local Settings\Temp генерируются для каждого файла папки с именами Временная папка {НОМЕР} для {ИМЯ_АРХИВА}.zip
                          Когда НОМЕР становится больше 99 то начинает выскакивать это окошко и разархивирования не происходит


                          Решилась проблема? Отпишите, пожалуйста. У меня как раз случай "многократного перезапуска" :o
                            Удалять временные файлы.
                            Фтп клиент для локальных сетей :
                            Ftp_Manager
                              Извините за некропост, но решение проблемы не нашел.
                              Как распаковать ВСЕ файлы из архива?
                              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script Execution time: 0,1097 ]   [ 14 queries used ]   [ Generated: 19.08.19, 01:30 GMT ]