Class for tar files manipulation. More...
#include <system/tar_abstraction.h>
Public Member Functions | |
UnTARAbstraction (void) | |
UnTARAbstraction (const std::string &FilePath) | |
void | OpenFile (const std::string &FilePath) |
std::size_t | GetCountOfFiles (void) |
void | ExtractFile (const std::size_t &FileCursor, const std::string &Folder, bool IgnoreFilePath) |
template<class type > | |
void | ExtractFile (const std::size_t &FileCursor, type &Storage) |
void | CloseFile (void) |
virtual | ~UnTARAbstraction () |
Private Member Functions | |
void | GotoFirstFile (void) |
void | ReadHeader (void) |
void | SetReadCursor (const std::size_t &ReadCursor) |
Private Attributes | |
std::size_t | Cursor |
TARFileHeader | Header |
nitro::File | LoadedFile |
Class for tar files manipulation.
Definition at line 122 of file tar_abstraction.h.
nitro::UnTARAbstraction::UnTARAbstraction | ( | void | ) |
Constructor.
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 54 of file tar_abstraction.cpp.
References nitro::exception::code(), and nitro::exception::what().
{ try { } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::UnTARAbstraction( void )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::UnTARAbstraction( void )::An error occured while opening file" ) , 1 ) ); } }
nitro::UnTARAbstraction::UnTARAbstraction | ( | const std::string & | FilePath | ) |
Constructor.
FilePath | - Path to the loading file. |
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 69 of file tar_abstraction.cpp.
References nitro::exception::code(), OpenFile(), and nitro::exception::what().
{ try { OpenFile( FilePath ); } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::UnTARAbstraction( void )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::UnTARAbstraction( void )::An error occured while opening file" ) , 1 ) ); } }
nitro::UnTARAbstraction::~UnTARAbstraction | ( | ) | [virtual] |
Destructor.
Definition at line 188 of file tar_abstraction.cpp.
References CloseFile().
{ try { CloseFile(); } catch( nitro::exception e ) { } catch( ... ) { } }
void nitro::UnTARAbstraction::CloseFile | ( | void | ) |
Finction closes TAR file.
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 172 of file tar_abstraction.cpp.
References nitro::FileAbstraction::Close(), nitro::exception::code(), LoadedFile, and nitro::exception::what().
Referenced by ~UnTARAbstraction().
{ try { LoadedFile.Close(); } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::CloseFile( void )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::CloseFile( void )::An error occured while closing file" ) , 1 ) ); } }
void nitro::UnTARAbstraction::ExtractFile | ( | const std::size_t & | FileCursor, | |
const std::string & | Folder, | |||
bool | IgnoreFilePath | |||
) |
Function extracts files.
FileCursor | - Cursor fo the file. | |
Folder | - Directory of the unzipping file. | |
IgnoreFilePath | - Deprecated. |
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 139 of file tar_abstraction.cpp.
References nitro::FSPath::AddEndSlash(), nitro::exception::code(), nitro::FSPath::ExtractFileName(), nitro::TARFileHeader::FileName, Header, nitro::TARFileHeader::LinkType, nitro::File::SaveBinDataToFile(), SetReadCursor(), and nitro::exception::what().
{ try { SetReadCursor( FileCursor ); if( '0' == Header.LinkType ) { std::string FilePath( "" ); if( IgnoreFilePath ) { FilePath = nitro::FSPath::AddEndSlash( std::string( Folder ) ) + nitro::FSPath::ExtractFileName( std::string( Header.FileName ) ); } else { FilePath = nitro::FSPath::AddEndSlash( std::string( Folder ) ) + std::string( Header.FileName ); } nitro::BinaryData Storage; ExtractFile( FileCursor , Storage ); nitro::File::SaveBinDataToFile( Storage , FilePath ); } } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::ExtractFile( const std::size_t & FileCursor , const std::string & Folder , bool IgnoreFilePath /* = true */ )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::ExtractFile( const std::size_t & FileCursor , const std::string & Folder , bool IgnoreFilePath /* = true */ )::An error occured while extracting file" ) , 1 ) ); } }
void nitro::UnTARAbstraction::ExtractFile | ( | const std::size_t & | FileCursor, | |
type & | Storage | |||
) |
Function extracts files.
FileCursor | - Cursor fo the file. | |
Storage | - Memory storage to accept data. |
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 375 of file tar_abstraction.h.
References nitro::Converters::atoi(), nitro::exception::code(), nitro::TARFileHeader::FileSize, Header, nitro::TARFileHeader::LinkType, LoadedFile, nitro::OCTAL, nitro::FileAbstraction::Read(), SetReadCursor(), and nitro::exception::what().
{ try { SetReadCursor( FileCursor ); if( Header.LinkType == '0' ) { char Buffer[ 512 ]; int FileSize( nitro::Converters::atoi( Header.FileSize , nitro::OCTAL ) ); int ReadBytes( 0 ) , TotalReadBytes( 0 ); do { LoadedFile.Read( Buffer , 512 ); ReadBytes = TotalReadBytes + 512 < FileSize ? 512 : FileSize % 512; if( ReadBytes > 0 ) { Storage.AppendData( Buffer , ReadBytes ); } TotalReadBytes += ReadBytes; } while( ReadBytes == 512 ); } } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::ExtractFile( const std::size_t & FileCursor , type & Storage )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::ExtractFile( const std::size_t & FileCursor , type & Storage )::An error occured while extracting file" ) , 1 ) ); } }
std::size_t nitro::UnTARAbstraction::GetCountOfFiles | ( | void | ) |
Function returns count of files.
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 103 of file tar_abstraction.cpp.
References nitro::Converters::atoi(), nitro::exception::code(), Cursor, nitro::FA_FILE_BEGIN, nitro::FA_FILE_CURRENT, nitro::TARFileHeader::FileName, nitro::TARFileHeader::FileSize, GotoFirstFile(), Header, LoadedFile, nitro::OCTAL, ReadHeader(), nitro::FileAbstraction::Seek(), nitro::FileAbstraction::Tell(), and nitro::exception::what().
{ try { std::size_t CurrentCursor( Cursor ); std::size_t CurrentFilePosition( LoadedFile.Tell() ); TARFileHeader CurrentHeader( Header ); GotoFirstFile(); std::size_t Counter( 0 ); for( ; std::string( "" ) != Header.FileName ; Counter++ ) { int FileSize( nitro::Converters::atoi( Header.FileSize , nitro::OCTAL ) ); if( FileSize ) { int Offset( FileSize / 512 * 512 + ( FileSize % 512 ? 512 : 0 ) ); LoadedFile.Seek( Offset , nitro::FA_FILE_CURRENT ); } ReadHeader(); } Cursor = CurrentCursor; Header = CurrentHeader; LoadedFile.Seek( CurrentFilePosition , nitro::FA_FILE_BEGIN ); return( Counter ); } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::GetCountOfFiles( void )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::GetCountOfFiles( void )::An error occured while getting count of files" ) , 1 ) ); } }
void nitro::UnTARAbstraction::GotoFirstFile | ( | void | ) | [private] |
Finction moves cursor to the beginning.
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 202 of file tar_abstraction.cpp.
References nitro::exception::code(), Cursor, nitro::FA_FILE_BEGIN, LoadedFile, ReadHeader(), nitro::FileAbstraction::Seek(), and nitro::exception::what().
Referenced by GetCountOfFiles(), OpenFile(), and SetReadCursor().
{ try { LoadedFile.Seek( 0 , nitro::FA_FILE_BEGIN ); Cursor = 0; ReadHeader(); } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::GotoFirstFile( void )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::GotoFirstFile( void )::An error occured while moving cursor to the begin" ) , 1 ) ); } }
void nitro::UnTARAbstraction::OpenFile | ( | const std::string & | FilePath | ) |
Function opens TAR file.
FilePath | - Path to the opening file. |
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 85 of file tar_abstraction.cpp.
References nitro::exception::code(), nitro::FA_FILE_BINARY, nitro::FA_FILE_READ, nitro::FA_FILE_WRITE, GotoFirstFile(), LoadedFile, nitro::FileAbstraction::Open(), and nitro::exception::what().
Referenced by UnTARAbstraction().
{ try { LoadedFile.Open( FilePath , nitro::FA_FILE_BINARY | nitro::FA_FILE_READ | nitro::FA_FILE_WRITE ); GotoFirstFile(); } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::OpenFile( const std::string & FilePath )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::OpenFile( const std::string & FilePath )::An error occured while opening file" ) , 1 ) ); } }
void nitro::UnTARAbstraction::ReadHeader | ( | void | ) | [private] |
Finction reads file's header.
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 222 of file tar_abstraction.cpp.
References nitro::exception::code(), Header, LoadedFile, nitro::FileAbstraction::Read(), and nitro::exception::what().
Referenced by GetCountOfFiles(), GotoFirstFile(), and SetReadCursor().
{ try { LoadedFile.Read( ( char * ) & Header , sizeof( Header ) ); } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::ReadHeader( void )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::ReadHeader( void )::An error occured while reading header" ) , 1 ) ); } }
void nitro::UnTARAbstraction::SetReadCursor | ( | const std::size_t & | ReadCursor | ) | [private] |
Finction sets read cursor in the file.
ReadCursor | - Element's cursor in the archive. |
nitro::exception | - An exception of that type is thrown. Contains error description. |
Definition at line 238 of file tar_abstraction.cpp.
References nitro::Converters::atoi(), nitro::exception::code(), Cursor, nitro::FA_FILE_CURRENT, nitro::TARFileHeader::FileSize, GotoFirstFile(), Header, LoadedFile, nitro::OCTAL, ReadHeader(), nitro::FileAbstraction::Seek(), and nitro::exception::what().
Referenced by ExtractFile().
{ try { /* special case */ if( Cursor > ReadCursor ) { GotoFirstFile(); } /* moving cursor */ if( Cursor != ReadCursor ) { for( std::size_t i( 0 ) ; i < ReadCursor - Cursor ; i++ ) { int FileSize( nitro::Converters::atoi( Header.FileSize , nitro::OCTAL ) ); int Offset( FileSize / 512 * 512 + ( FileSize % 512 ? 512 : 0 ) ); if( Offset ) { LoadedFile.Seek( Offset , nitro::FA_FILE_CURRENT ); } ReadHeader(); } Cursor = ReadCursor; } } catch( nitro::exception e ) { throw( nitro::exception( std::string( "UnTARAbstraction::SetReadCursor( const std::size_t & ReadCursor )::" ) + e.what() , e.code() ) ); } catch( ... ) { throw( nitro::exception( std::string( "UnTARAbstraction::SetReadCursor( const std::size_t & ReadCursor )::An error occured while setting cursor" ) , 1 ) ); } }
std::size_t nitro::UnTARAbstraction::Cursor [private] |
Current read cursor.
Definition at line 296 of file tar_abstraction.h.
Referenced by GetCountOfFiles(), GotoFirstFile(), and SetReadCursor().
TARFileHeader nitro::UnTARAbstraction::Header [private] |
File's header.
Definition at line 308 of file tar_abstraction.h.
Referenced by ExtractFile(), GetCountOfFiles(), ReadHeader(), and SetReadCursor().
Loaded file.
Definition at line 372 of file tar_abstraction.h.
Referenced by CloseFile(), ExtractFile(), GetCountOfFiles(), GotoFirstFile(), OpenFile(), ReadHeader(), and SetReadCursor().