Advertise Mobile SDKs Books Events Forum News Social Networking Support Us
Follow @iphonedevsdk on Twitter

Interface 2, Advanced iOS
Mockup & Code Gen
($9.99)

Make your own iPhone apps
and run them live!
(free)

Pic Frame Dynamo: Photo Editing
($0.99)

Abiliator
($1.99)

Want your application or service advertised on iPhone Dev SDK?

Go Back   iPhone Dev SDK Forum

View Single Post
Old 06-30-2010, 08:26 PM   #48 (permalink)
randomdot
Registered Member
 
Join Date: May 2010
Posts: 1
randomdot is on a distinguished road
Default Extract data to NSData

ZipArchive.h

-(NSArray *) UnzipFileLists;
-(NSData *) dataForUnzipFileNameNSString *)fileName;


ZipArchive.mm

Code:
-(NSData *) dataForUnzipFileName:(NSString *)fileName {
	int ret = unzLocateFile(_unzFile, [fileName UTF8String], 0);
	if(ret != UNZ_OK) {
		[self OutputErrorMessage:@"File not found!"];
		return nil;
	}
	
	NSMutableData *data = [NSMutableData data];
	unsigned char		buffer[4096] = {0};
	int byteRead;

	if( [_password length]==0 )
		ret = unzOpenCurrentFile( _unzFile );
	else
		ret = unzOpenCurrentFilePassword( _unzFile, [_password cStringUsingEncoding:NSASCIIStringEncoding] );
	if( ret!=UNZ_OK )
	{
		[self OutputErrorMessage:@"Error occurs"];
		return nil;
	}

	while( YES )
	{
		byteRead=unzReadCurrentFile(_unzFile, buffer, 4096);
		if( byteRead > 0 )
		{
			[data appendBytes:buffer length:byteRead];
//			fwrite(buffer, read, 1, fp );
		}
		else if( byteRead<0 )
		{
			[self OutputErrorMessage:@"Failed to reading zip file"];
			break;
		}
		else 
			break;				
	}
	unzCloseCurrentFile( _unzFile );
	return ([data length] != 0)?data:nil;
	
}

-(NSArray *) UnzipFileLists {
	BOOL success = YES;
	int ret = unzGoToFirstFile( _unzFile );
//	unsigned char		buffer[4096] = {0};
//	NSFileManager* fman = [NSFileManager defaultManager];
	if( ret!=UNZ_OK )
	{
		[self OutputErrorMessage:@"Failed"];
	}
	
	NSMutableArray *fileLists = [NSMutableArray array];
	
	do{
		// Get file info
		unz_file_info	fileInfo ={0};
		ret = unzGetCurrentFileInfo(_unzFile, &fileInfo, NULL, 0, NULL, 0, NULL, 0);
		if( ret!=UNZ_OK )
		{
			[self OutputErrorMessage:@"Error occurs while getting file info"];
			success = NO;
			break;
		}
		char* filename = (char*) malloc( fileInfo.size_filename +1 );
		unzGetCurrentFileInfo(_unzFile, &fileInfo, filename, fileInfo.size_filename + 1, NULL, 0, NULL, 0);
		filename[fileInfo.size_filename] = '\0';
		
		// check if it contains directory
		NSString * strPath = [NSString  stringWithCString:filename];
		BOOL isDirectory = NO;
		if( filename[fileInfo.size_filename-1]=='/' || filename[fileInfo.size_filename-1]=='\\')
			isDirectory = YES;
		free( filename );
		if( [strPath rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"/\\"]].location!=NSNotFound )
		{// contains a path
			strPath = [strPath stringByReplacingOccurrencesOfString:@"\\" withString:@"/"];
		}
		
		if(strPath != nil)
			[fileLists addObject:strPath];

		ret = unzGoToNextFile( _unzFile );
	}while( ret==UNZ_OK && UNZ_OK!=UNZ_END_OF_LIST_OF_FILE );
	return fileLists;
}
randomdot is offline   Reply With Quote
 

» Advertisements
» Online Users: 366
16 members and 350 guests
alexP, blueorb, Creativ, cristofercolmbos, Davor, jbro, mediaspree, Meoz, NSString, spiderguy84, taylor202, thebeast, TylerBetable, UconnAggie, veliata73
Most users ever online was 1,387, 04-10-2012 at 04:21 AM.
» Stats
Members: 175,552
Threads: 94,078
Posts: 402,730
Top Poster: BrianSlick (7,990)
Welcome to our newest member, veliata73
Powered by vBadvanced CMPS v3.1.0

All times are GMT -5. The time now is 07:00 PM.
Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.