TNB Library
TnbArchiver.h
[詳解]
1#pragma once
12#include "TnbStrVector.h"
13#include "TnbTemporaryFile.h"
14
15
16
17//TNB Library
18namespace TNB
19{
20
21
22
35{
36public:
37
44 CArchiver(CArchiverDllHandler* pDll) : m_pDll(pDll)
45 {
46 ASSERT0( pDll != NULL, "CArchiver()", "正しいアーカイバ管理クラスが指定されていません。" );
47 if ( pDll == NULL )
48 {
50 }
51 ASSERT0( pDll->IsReady(), "CArchiver()", "使用可能なアーカイバ管理クラスが指定されていません。" );
52 if ( ! pDll->IsReady() )
53 {
54 throw CNullPointerException();
55 }
56 ::GetTempPathA(MAX_PATH, m_strWorkDir.GetBuffer(MAX_PATH));
57 m_strWorkDir.ReleaseBuffer();
58 }
59
66 {
67 CStr s = m_strArcFile;
68 return s;
69 }
70
77 bool SetTargetArchiveFile(LPCTSTR lpszArcFile)
78 {
79 bool r = false;
80 if ( ToInt(::GetFileAttributes(lpszArcFile)) == -1 )
81 {
82 r = (::GetLastError() == ERROR_FILE_NOT_FOUND);
83 }
84 else if ( m_pDll->CheckArchive(CAscii(lpszArcFile), 0) )
85 {
86 r = true;
87 }
88 if ( r )
89 {
90 m_strArcFile = lpszArcFile;
91 }
92 return r;
93 }
94
100 void SetWorkDirectory(LPCTSTR lpszWorkDir)
101 {
102 m_strWorkDir = lpszWorkDir;
103 }
104
113 int Delete(LPCTSTR lpszName, LPCTSTR lpszOption = NULL)
114 {
115 if ( m_strArcFile.IsEmpty() )
116 {
117 return -1;
118 }
119 return m_Exec(m_pDll->EC_Delete, lpszName, lpszOption);
120 }
121
130 int Delete(const CStrVector& vs, LPCTSTR lpszOption = NULL)
131 {
132 if ( m_strArcFile.IsEmpty() )
133 {
134 return -1;
135 }
136 return m_ExecList(m_pDll->EC_Delete, vs, lpszOption);
137 }
138
147 int Extract(LPCTSTR lpszName, LPCTSTR lpszOption = NULL)
148 {
149 if ( ! m_IsReady() )
150 {
151 return -1;
152 }
153 return m_Exec(m_pDll->EC_Extract, lpszName, lpszOption);
154 }
155
164 int Extract(const CStrVector& vs, LPCTSTR lpszOption = NULL)
165 {
166 if ( ! m_IsReady() )
167 {
168 return -1;
169 }
170 return m_ExecList(m_pDll->EC_Extract, vs, lpszOption);
171 }
172
181 int ExtractMem(LPCTSTR lpszName, CByteVector& _vb, LPCTSTR lpszOption = NULL)
182 {
183 int r = -1;
184 if ( ! m_strArcFile.IsEmpty() )
185 {
186 size_t dwSize = _vb.GetSize();
187 #ifdef _UNICODE
188 int r = m_pDll->ExtractMem(m_strArcFile, CAscii(lpszName), _vb.GetBuffer(), dwSize, CAscii(lpszOption));
189 #else
190 int r = m_pDll->ExtractMem(m_strArcFile, lpszName, _vb.GetBuffer(), dwSize, lpszOption);
191 #endif
192 _vb.ReleaseBuffer();
193 _vb.SetSize((r == 0) ? dwSize : 0);
194 }
195 return r;
196 }
197
206 int ExtractWithDirectory(LPCTSTR lpszName, LPCTSTR lpszOption = NULL)
207 {
208 if ( ! m_IsReady() )
209 {
210 return -1;
211 }
212 return m_Exec(m_pDll->EC_ExtractDir, lpszName, lpszOption);
213 }
214
223 int ExtractWithDirectory(const CStrVector& vs, LPCTSTR lpszOption = NULL)
224 {
225 if ( ! m_IsReady() )
226 {
227 return -1;
228 }
229 return m_ExecList(m_pDll->EC_ExtractDir, vs, lpszOption);
230 }
231
240 int Attract(LPCTSTR lpszName, LPCTSTR lpszOption = NULL)
241 {
242 if ( ! m_IsReady() )
243 {
244 return -1;
245 }
246 return m_Exec(m_pDll->EC_Attract, lpszName, lpszOption);
247 }
248
257 int Attract(const CStrVector& vs, LPCTSTR lpszOption = NULL)
258 {
259 if ( ! m_IsReady() )
260 {
261 return -1;
262 }
263 return m_ExecList(m_pDll->EC_Attract, vs, lpszOption);
264 }
265
276 int AttractMem(LPCTSTR lpszName, time_t time, WORD wAttr, const CByteVector& vb, LPCTSTR lpszOption = NULL)
277 {
278 int r = -1;
279 if ( ! m_strArcFile.IsEmpty() )
280 {
281 DWORD dwSize = ToDword(vb.GetSize());
282 #ifdef _UNICODE
283 r = m_pDll->CompressMem(m_strArcFile, CAscii(lpszName), time, wAttr, vb.ReferBuffer(), dwSize, CAscii(lpszOption));
284 #else
285 r = m_pDll->CompressMem(m_strArcFile, lpszName, time, wAttr, vb.ReferBuffer(), dwSize, lpszOption);
286 #endif
287 }
288 return r;
289 }
290private:
291 CArchiverDllHandler* m_pDll;
292 CAscii m_strArcFile;
293 CAscii m_strWorkDir;
294
296 bool m_IsReady(void) const
297 {
298 return (! m_strArcFile.IsEmpty()) && (! m_strWorkDir.IsEmpty());
299 }
300
302 int m_Exec(CArchiverDllHandler::ECommand cmd, LPCTSTR lpszName, LPCTSTR lpszOption)
303 {
304 #ifdef _UNICODE
305 return m_pDll->Execute(cmd, m_strArcFile, m_strWorkDir, CAscii(lpszName), CAscii(lpszOption));
306 #else
307 return m_pDll->Execute(cmd, m_strArcFile, m_strWorkDir, lpszName, lpszOption);
308 #endif
309 }
310
312 int m_ExecList(CArchiverDllHandler::ECommand cmd, const CStrVector& vs, LPCTSTR lpszOption)
313 {
314 CAscii strContent;
315 if ( lpszOption != NULL )
316 {
317 strContent += lpszOption;
318 strContent += "\r\n";
319 }
320 loop ( i, vs.GetSize() )
321 {
322 strContent += CAscii(vs[i]);
323 strContent += "\r\n";
324 }
325 CTemporaryFile tmp;
326 CStr strName = tmp.Create(strContent.GetLength(), strContent.begin());
327 int r = m_Exec(cmd, "@" + strName, NULL);
328 tmp.Free();
329 return r;
330 }
331};
332
333
334
335}; // TNB
アーカイバDLL関係のヘッダ
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
文字列情報配列管理関係のヘッダ
テンポラリファイル関係のヘッダ
アーカイバDLL管理クラス
@ EC_ExtractDir
抽出(Directory付き)
bool IsReady(void) const
[確認] DLL準備確認
bool CheckArchive(LPCSTR lpszArcFile, const int iMode)
[確認] ファイル形式確認
int Execute(ECommand cmd, LPCSTR lpszArcFile, LPCSTR lpszPath, LPCSTR lpszFilter, LPCSTR lpszOption=NULL)
[実行] コマンド実行
int CompressMem(LPCSTR lpszArcFile, LPCSTR lpszName, time_t time, WORD wAttr, const BYTE *lpBuf, DWORD &_dwSize, LPCSTR lpszOption=NULL)
[実行] メモリから格納
int ExtractMem(LPCSTR lpszArcFile, LPCSTR lpszName, BYTE *_lpBuf, size_t &dwSize, LPCSTR lpszOption=NULL)
[実行] メモリに抽出
アーカイバクラス
Definition: TnbArchiver.h:35
CArchiver(CArchiverDllHandler *pDll)
コンストラクタ
Definition: TnbArchiver.h:44
int Extract(const CStrVector &vs, LPCTSTR lpszOption=NULL)
[操作] 展開.
Definition: TnbArchiver.h:164
int Extract(LPCTSTR lpszName, LPCTSTR lpszOption=NULL)
[操作] 取得.
Definition: TnbArchiver.h:147
int ExtractWithDirectory(const CStrVector &vs, LPCTSTR lpszOption=NULL)
[操作] 展開.
Definition: TnbArchiver.h:223
int ExtractMem(LPCTSTR lpszName, CByteVector &_vb, LPCTSTR lpszOption=NULL)
[操作] 展開
Definition: TnbArchiver.h:181
void SetWorkDirectory(LPCTSTR lpszWorkDir)
[設定] 作業ディレクトリ指定
Definition: TnbArchiver.h:100
bool SetTargetArchiveFile(LPCTSTR lpszArcFile)
[設定] 対象アーカイブ指定
Definition: TnbArchiver.h:77
CStr GetTargetArchiveFile(void) const
[取得] 対象アーカイブ取得
Definition: TnbArchiver.h:65
int ExtractWithDirectory(LPCTSTR lpszName, LPCTSTR lpszOption=NULL)
[操作] 展開.
Definition: TnbArchiver.h:206
int AttractMem(LPCTSTR lpszName, time_t time, WORD wAttr, const CByteVector &vb, LPCTSTR lpszOption=NULL)
[操作] メモリから格納
Definition: TnbArchiver.h:276
int Attract(LPCTSTR lpszName, LPCTSTR lpszOption=NULL)
[操作] 格納.
Definition: TnbArchiver.h:240
int Delete(LPCTSTR lpszName, LPCTSTR lpszOption=NULL)
[操作] 削除.
Definition: TnbArchiver.h:113
int Delete(const CStrVector &vs, LPCTSTR lpszOption=NULL)
[操作] 削除.
Definition: TnbArchiver.h:130
int Attract(const CStrVector &vs, LPCTSTR lpszOption=NULL)
[操作] 格納.
Definition: TnbArchiver.h:257
NULLポインタ例外
Definition: TnbException.h:172
bool IsEmpty(void) const
[確認] 空チェック
Definition: TnbStr.h:528
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
Definition: TnbStr.h:954
size_t GetLength(void) const
[取得] 文字列長
Definition: TnbStr.h:518
const_iterator begin(void) const
[反復] 先頭const_iterator.
Definition: TnbStr.h:89
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
Definition: TnbStr.h:914
CStr Create(void)
[操作] 作成.
void Free(void)
[操作] 解放.
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
TYP * GetBuffer(size_t size=0)
[操作] データアドレス取得
Definition: TnbVector.h:745
void ReleaseBuffer(void)
[操作] データの管理を元に戻す.
Definition: TnbVector.h:805
virtual bool SetSize(size_t size)
[操作] サイズ指定
Definition: TnbVector.h:618
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
Definition: TnbVector.h:664
TNB::CStrT< char > CAscii
ASCII文字列クラス
Definition: TnbStr.h:1758
DWORD ToDword(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:395
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:367
TNB Library
Definition: TnbDoxyTitle.txt:2