Jump to content
programmer1337

Biblioteca Compression API

Recommended Posts

programmer1337

Boas pessoal,

Estive a pesquisar pela net e deparei-me com esta biblioteca da Microsoft compressapi.h que permite comprimir ficheiros estive a ler o site

(http://msdn.microsoft.com/en-us/library/windows/desktop/hh437596%28v=vs.85%29.aspx) e o que acontece é que não encontrei nenhum sitio onde pudesse fazer o download dela... alguem ja usou? ou sabe onde a posso descarregar?

Cumps

E desde já um mto obrigado

Edited by programmer1337

Share this post


Link to post
Share on other sites
pikax

Qual e' a tua IDE e SO?


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Flinger

Run-time requirements

The Compression API is available beginning with the Windows 8 or Windows Server 2012.

  • Vote 1

Share this post


Link to post
Share on other sites
programmer1337

Estou a utilizar o Miscrosoft Visual Studio 2010 em windows 7, dá para fazer download dela?

Share this post


Link to post
Share on other sites
pikax

Nop, So' com o VS 12 e com o windows 8!


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
HappyHippyHippo

coitada da zlib ... sempre relegada para ultimo e sem usada no final ...

Edited by HappyHippyHippo
  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
programmer1337

Pikax quer dizer que mesmo que instale o VS12 não consigo por isso a funcionar no W7 certo?

HappyHappyHippo a libzip tem boas taxas de compressão?

Share this post


Link to post
Share on other sites
HappyHippyHippo

HappyHappyHippo a libzip tem boas taxas de compressão?

estás com medo que fiquem sem espaço no disco ?

---

ps : alterei a libraria, pretendia dizer zlib e tinha libzip

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pikax
Pikax quer dizer que mesmo que instale o VS12 não consigo por isso a funcionar no W7 certo?

Sim


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
Flinger

Nop, So' com o VS 12 e com o windows 8!

Não vejo na página nenhuma obrigatoriedade de usar o VS2012. Apenas Windows 8 ou Windows Server 2012

Share this post


Link to post
Share on other sites
pikax

Um pouco de pesquisa e vi que o que disse estava errado, existe formas de usar o SDK do windows 8 no Visual Studio 2010

aqui outro

EDIT: Download do SKD

Edited by pikax

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
programmer1337

Boas pessoal mais uma vez =) seguindo os vossos conselhos instalei o VS2012 e instalei o W8 SDK copiei o codigo que a microsoft fornece para o compressor

(http://msdn.microsoft.com/en-us/library/windows/desktop/hh968104%28v=vs.85%29.aspx)

mas está a dar uns erros de link que não percebo o porquê de aparecerem :X importam-se de dar uma vista de olhos?

ksg7.png

Cumprimentos e desde já um mto obrigado

Share this post


Link to post
Share on other sites
pikax

Segundo esta pagina tens que linkar a biblioteca Cabinet.lib

ficaria +/- assim(nao testado):

#include <Windows.h>
#include <stdio.h>
#include <compressapi.h>

#pragma comment(lib, "Cabinet.lib")

void wmain(_In_ int argc, _In_ WCHAR *argv[])
{
   COMPRESSOR_HANDLE Compressor    = NULL;
   PBYTE CompressedBuffer          = NULL;
   PBYTE InputBuffer               = NULL;
   HANDLE InputFile                = INVALID_HANDLE_VALUE;
   HANDLE CompressedFile           = INVALID_HANDLE_VALUE;    
   BOOL DeleteTargetFile           = TRUE;
   BOOL Success;
   SIZE_T CompressedDataSize, CompressedBufferSize;
   DWORD InputFileSize, ByteRead, ByteWritten;
   LARGE_INTEGER FileSize;    
   ULONGLONG StartTime, EndTime;
   double TimeDuration;

   if (argc != 3)
   {
       wprintf(L"Usage:\n\t%s <input_file_name> <compressd_file_name>\n", argv[0]);
       return;
   }

   //  Open input file for reading, existing file only.
   InputFile = CreateFile(
       argv[1],                  //  Input file name
       GENERIC_READ,             //  Open for reading
       FILE_SHARE_READ,          //  Share for read
       NULL,                     //  Default security
       OPEN_EXISTING,            //  Existing file only
       FILE_ATTRIBUTE_NORMAL,    //  Normal file
       NULL);                    //  No attr. template

   if (InputFile == INVALID_HANDLE_VALUE)
   {
       wprintf(L"Cannot open \t%s\n", argv[1]);
       goto done;
   }

   //  Get input file size.
   Success = GetFileSizeEx(InputFile, &FileSize);
   if ((!Success)||(FileSize.QuadPart > 0xFFFFFFFF))
   {
       wprintf(L"Cannot get input file size or file is larger than 4GB.\n");        
       goto done;
   }
   InputFileSize = FileSize.LowPart;

   //  Allocate memory for file content.
   InputBuffer = (PBYTE)malloc(InputFileSize);
   if (!InputBuffer)
   {
       wprintf(L"Cannot allocate memory for uncompressed buffer.\n");
       goto done;
   }                              

   //  Read input file.
   Success = ReadFile(InputFile, InputBuffer, InputFileSize, &ByteRead, NULL);
   if ((!Success)||(ByteRead != InputFileSize))
   {
       wprintf(L"Cannot read from \t%s\n", argv[1]);
       goto done;
   }

   //  Open an empty file for writing, if exist, overwrite it.
   CompressedFile = CreateFile(
       argv[2],                  //  Compressed file name
       GENERIC_WRITE|DELETE,     //  Open for writing; delete if cannot compress
       0,                        //  Do not share
       NULL,                     //  Default security
       CREATE_ALWAYS,            //  Create a new file; if exist, overwrite it
       FILE_ATTRIBUTE_NORMAL,    //  Normal file
       NULL);                    //  No template

   if (CompressedFile == INVALID_HANDLE_VALUE)
   {
       wprintf(L"Cannot create file \t%s\n", argv[2]);
       goto done;
   }

   //  Create an XpressHuff compressor.
   Success = CreateCompressor(
       COMPRESS_ALGORITHM_XPRESS_HUFF, //  Compression Algorithm
       NULL,                           //  Optional allocation routine
       &Compressor);                   //  Handle

   if (!Success)
   {
       wprintf(L"Cannot create a compressor %d.\n", GetLastError());
       goto done;
   }

   //  Query compressed buffer size.
   Success = Compress(
       Compressor,                  //  Compressor Handle
       InputBuffer,                 //  Input buffer, Uncompressed data
       InputFileSize,               //  Uncompressed data size
       NULL,                        //  Compressed Buffer
       0,                           //  Compressed Buffer size
       &CompressedBufferSize);      //  Compressed Data size

   //  Allocate memory for compressed buffer.
   if (!Success)
   {
       DWORD ErrorCode = GetLastError();

       if (ErrorCode != ERROR_INSUFFICIENT_BUFFER)
       {
           wprintf(L"Cannot compress data: %d.\n", ErrorCode);
           goto done;
       }

       CompressedBuffer = (PBYTE)malloc(CompressedBufferSize);
       if (!CompressedBuffer)
       {
           wprintf(L"Cannot allocate memory for compressed buffer.\n");
           goto done;
       }
   }

   StartTime = GetTickCount64();

   //  Call Compress() again to do real compression and output the compressed
   //  data to CompressedBuffer.
   Success = Compress(
       Compressor,             //  Compressor Handle
       InputBuffer,            //  Input buffer, Uncompressed data
       InputFileSize,          //  Uncompressed data size
       CompressedBuffer,       //  Compressed Buffer
       CompressedBufferSize,   //  Compressed Buffer size
       &CompressedDataSize);   //  Compressed Data size

   if (!Success)
   {
       wprintf(L"Cannot compress data: %d\n", GetLastError());
       goto done;
   }

   EndTime = GetTickCount64();

   //  Get compression time.
   TimeDuration = (EndTime - StartTime)/1000.0;

   //  Write compressed data to output file.
   Success = WriteFile(
       CompressedFile,     //  File handle
       CompressedBuffer,   //  Start of data to write
       CompressedDataSize, //  Number of byte to write
       &ByteWritten,       //  Number of byte written
       NULL);              //  No overlapping structure

   if ((ByteWritten != CompressedDataSize) || (!Success))
   {
       wprintf(L"Cannot write compressed data to file: %d.\n", GetLastError());
       goto done;
   }

   wprintf(
       L"Input file size: %d; Compressed Size: %d\n", 
       InputFileSize, 
       CompressedDataSize);
   wprintf(L"Compression Time(Exclude I/O): %.2f seconds\n", TimeDuration);
   wprintf(L"File Compressed.\n");

   DeleteTargetFile = FALSE;

done:
   if (Compressor != NULL)
   {
       CloseCompressor(Compressor);
   }

   if (CompressedBuffer) 
   {
       free(CompressedBuffer);
   }

   if (InputBuffer)
   {
       free(InputBuffer);
   }

   if (InputFile != INVALID_HANDLE_VALUE)
   {
       CloseHandle(InputFile);
   }

   if (CompressedFile != INVALID_HANDLE_VALUE)
   {
       //  Compression fails, delete the compressed file.
       if (DeleteTargetFile)
       {
           FILE_DISPOSITION_INFO fdi;
           fdi.DeleteFile = TRUE;      //  Marking for deletion
           Success = SetFileInformationByHandle(
               CompressedFile,
               FileDispositionInfo,
               &fdi,
               sizeof(FILE_DISPOSITION_INFO));    
           if (!Success) {
               wprintf(L"Cannot delete corrupted compressed file.\n");
           }
       }
       CloseHandle(CompressedFile);
   }
}



Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
programmer1337

Olá mais uma vez estive a testar aquilo que disseste e deu-me o seguinte erro

4kdp.png

como a Microsoft já não disponiblisa o Cabinet SDK fiz download do mesmo por aqui (web.archive.org/web/20070403215326/http://download.microsoft.com/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/cabsdk.exe)

Tirei o Cabinet.dll que vem no ficheiro desse link so que agr nao sei onde o colocar :X alguma ideia

Cumprimentos e mais uma vez obrigado

Share this post


Link to post
Share on other sites
HappyHippyHippo

coitada da zlib ... sempre relegada para ultimo e sempre usada no final ...

ainda vais a tempo ...

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pikax
Olá mais uma vez estive a testar aquilo que disseste e deu-me o seguinte erro

4kdp.png

como a Microsoft já não disponiblisa o Cabinet SDK fiz download do mesmo por aqui (web.archive.org/web/20070403215326/http://download.microsoft.com/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/cabsdk.exe)

Tirei o Cabinet.dll que vem no ficheiro desse link so que agr nao sei onde o colocar :X alguma ideia

Cumprimentos e mais uma vez obrigado

Tens que ter o WINDOWS 8!!!!

Usa o que o HappyHippyHippo falou!


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Share this post


Link to post
Share on other sites
programmer1337

Muito obrigado pessoal pela ajuda que me deram :) instalei o W8 e já realizei os testes que queria :P thanks

Share this post


Link to post
Share on other sites
HappyHippyHippo

Muito obrigado pessoal pela ajuda que me deram :) instalei o W8 e já realizei os testes que queria :P thanks

agora obriga toda a gente que usa o software que estas a criar a usar o W8 ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pwseo

Muito obrigado pessoal pela ajuda que me deram :) instalei o W8 e já realizei os testes que queria :P thanks

Algo me parece errado nisso... Ui, espera!:

agora obriga toda a gente que usa o software que estas a criar a usar o W8 ...

Pois, bem me parecia que algo estava mal.

Mudar de sistema operativo para poder utilizar uma API de compressão num programa... é uma inversão de prioridades engraçada. E como o HappyHippyHippo referiu, agora o teu programa garantidamente não funciona em nenhum computador com Windows anterior ao 8.

Falaram-te da zlib acima. Não servia? :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.