// 解凍する //============================================================================// // 概要:なし。 // 補足:なし。 //============================================================================// BOOL Controller::Extract( UINT ui, const string& strPath) { File* pFile = pArchiveFile->GetChildFile( ui) ; if( !pFile) { return FALSE ; } if( pArchiveFile->GetStatus() != ArchiveFile::Status::UNCOMPRESSED) { return FALSE ; } FILE* fExtract = fopen( strPath.c_str(), "wb") ; FILE* fZip = fopen( pFile->GetArchivePath().c_str(), "rb") ; if( fExtract && fZip) { ULONG ulHead = pFile->GetStartPoint() ; ULONG ulFileLength = pFile->GetEndPoint() - ulHead; #define BUF_SIZE 4048 BYTE pbyte[ BUF_SIZE] ; if( fseek( fZip, ulHead, SEEK_SET) == 0) { while( ulFileLength > 0) { ULONG ulSize = ( BUF_SIZE < ulFileLength ? BUF_SIZE : ulFileLength) ; fread( pbyte, sizeof( BYTE), ulSize, fZip) ; fwrite( pbyte, sizeof( BYTE), ulSize, fExtract) ; ulFileLength -= ulSize ; } } } fclose( fZip) ; fclose( fExtract) ; return TRUE ; }