Собственно, как запаковывать/распаковывать zip архивы винапишными функциями(и есть ли вообще таковые)? Я не уверен, но венда вроде еще умеет саомстоятельно работать с cab архивами, если да, то как распаковывать такие архивы?
Для cab файлов http://msdn.microsoft.com/en-us/library/aa377404(VS.85).aspx насчет зипа можно покопать zipfldr.dll
спс Я уже копал. Экспортируемые функции: Код (Text): RouteTheCall DllCanUnloadNow DllGetClassObject DllRegisterServer DllUnregisterServer RegisterSendto Что-то непонятное... Дальше не стал копать. Да мне только распаковка и нужна. Спасибо. Хотя вроде и запаковка есть(нашел LZCreateFileW), ведь венда умеет как-то создавать зжатые zip-папки.
Ну умеет она только с XP и весь функционал реализован в zipfldr.dll Разве LZ == zip? этот код Код (Text): nt _tmain(int argc, _TCHAR* argv[]) { if (argc > 2) { OFSTRUCT ofs_in = {0}; OFSTRUCT ofs_out = {0}; INT hSrcFile = 0, hDstFile = 0; DWORD ec = 0; hSrcFile = LZOpenFile(argv[1], &ofs_in, OF_READ); ec = GetLastError(); if (hSrcFile >= 0) { hDstFile = LZOpenFile(argv[2], &ofs_out, OF_WRITE); ec = GetLastError(); if(hDstFile >= 0) { ec = LZCopy(hDstFile, hSrcFile); switch(ec) { case LZERROR_BADINHANDLE: printf("The handle identifying the source file is not valid. The file cannot be read.\n"); break; case LZERROR_BADOUTHANDLE: printf("The handle identifying the destination file is not valid. The file cannot be written.\n"); break; case LZERROR_GLOBALLOC: printf("The maximum number of open compressed files has been exceeded or local memory cannot be allocated.\n"); break; case LZERROR_GLOBLOCK: printf("The LZ file handle cannot be locked down.\n"); break; case LZERROR_READ: printf("The source file format is not valid.\n"); break; default: printf("ec = %X\n", ec); } LZClose(hDstFile); } LZClose(hSrcFile); } } } говорит The handle identifying the source file is not valid. The file cannot be read. если натравливать его на zip файл созданый раром(при создании средствами винды тоже самое)
nobodyzzz надо создавать с помощью compress.exe (в ранних версиях винды и\или в продуктах борланада было) и это ес-но совсем не зип и совсем не архиватор, обычный компрессор.
censored это понятно =) но человек спрашивал про zip-файлы я не много накосячил вместо Код (Text): ec = LZCopy(hDstFile, hSrcFile); надо Код (Text): ec = LZCopy(hSrcFile, hDstFile); Но сути это не меняет =) - выполняется без ошибок, но ничего не распаковывает(для zip файлов, для файлов созданных compress.exe все работает отлично)
Не имеет отношения к ZIP. Это старый (Win16) алго/формат инсталляционных файлов. Для ZIP лучше всего поискать MFC реализацию ZLib (линка нет под рукой) - хорошо работает с большими файлами. Оригинальная - полное дерьмо.
покопался немного в zipfldr.dll =)) вот код распаковки zip файла средствами zipfldr.dll http://nopaste.info/86c2de80d8.html