TNB Library
TnbLzFile.h
[詳解]
1#pragma once
11#include "TnbReader.h"
12
13
14
15#include <lzexpand.h>
16#pragma comment(lib,"lz32.lib")
17
18
19
20//TNB Library
21namespace TNB
22{
23
24
25
39class CLzFileReader : public IReader
40{
41 INT m_iHandle;
42 CStr m_strName;
43
45 void m_Close(void)
46 {
47 m_strName.Empty();
48 if ( m_iHandle >= 0 )
49 {
50 ::LZClose(m_iHandle);
51 m_iHandle = -1;
52 }
53 }
54
55public:
56
58 CLzFileReader(void) : m_iHandle(-1)
59 {
60 }
61
63 virtual ~CLzFileReader(void)
64 {
65 m_Close();
66 }
67
75 bool Open(LPCTSTR lpszLzFile, bool boIsShare = true)
76 {
77 CStr s = lpszLzFile;
78 Close();
80 INT r = ::LZOpenFile(
81 s.GetBuffer(), work, static_cast<WORD>(OF_READ | (boIsShare ? OF_SHARE_DENY_NONE : OF_SHARE_EXCLUSIVE)));
82 if ( r >= 0 )
83 {
84 m_strName = lpszLzFile;
85 m_iHandle = r;
86 }
87 return r >= 0;
88 }
89
97 bool Copy(LPCTSTR lpszDstFile)
98 {
99 if ( ! CanRead() ){ return false; }
101 CStr s = lpszDstFile;
102 INT r = ::LZOpenFile(s.GetBuffer(), work, OF_CREATE);
103 if ( r >= 0 )
104 {
105 if ( ::LZCopy(m_iHandle, r) >= 0 )
106 {
107 return true;
108 }
109 }
110 return false;
111 }
112
117 virtual LPCTSTR GetOpenName(void) const
118 {
119 return m_strName;
120 }
121
126 virtual void Close(void)
127 {
128 m_Close();
129 }
130
136 virtual bool CanRead(void) const
137 {
138 return m_iHandle >= 0;
139 }
140
146 virtual LONGLONG GetSize(void) const
147 {
148 LONGLONG c = Seek(0, CURRENT);
149 LONGLONG r = Seek(0, END);
150 Seek(c, TOP);
151 return r;
152 }
153
162 virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek = TOP) const
163 {
164 return ::LZSeek(m_iHandle, ToInt(llOffset), eSeek);
165 }
166
174 virtual size_t Read(size_t size, LPVOID _P) const
175 {
176 INT r = ::LZRead(m_iHandle, static_cast<char *>(_P), ToInt(size));
177 if ( r < 0 )
178 {
179 throw CReadFailureException(ERROR_ACCESS_DENIED);
180 }
181 return r;
182 }
183
190 static CStr GetExpandedName(LPCTSTR lpszLzFile)
191 {
192 CStr strSrc = lpszLzFile;
193 CStr strDst;
194 if ( ::GetExpandedName(strSrc.GetBuffer(), strDst.GetBuffer(MAX_PATH)) >= 0 )
195 {
196 strDst.ReleaseBuffer();
197 return strDst;
198 }
199 return CStr();
200 }
201};
202
203
204
205}; // TNB
ファイル関係のヘッダ
LZファイル読み込みクラス
Definition: TnbLzFile.h:40
virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek=TOP) const
[操作] シーク.
Definition: TnbLzFile.h:162
virtual size_t Read(size_t size, LPVOID _P) const
[取得] 読み込み
Definition: TnbLzFile.h:174
static CStr GetExpandedName(LPCTSTR lpszLzFile)
[取得] 圧縮前名前取得
Definition: TnbLzFile.h:190
bool Open(LPCTSTR lpszLzFile, bool boIsShare=true)
[設定] オープン
Definition: TnbLzFile.h:75
virtual LONGLONG GetSize(void) const
[取得] サイズ取得
Definition: TnbLzFile.h:146
virtual bool CanRead(void) const
[確認] 読み込み可能か
Definition: TnbLzFile.h:136
bool Copy(LPCTSTR lpszDstFile)
[複製] コピー
Definition: TnbLzFile.h:97
CLzFileReader(void)
コンストラクタ
Definition: TnbLzFile.h:58
virtual LPCTSTR GetOpenName(void) const
[取得] オープン名取得
Definition: TnbLzFile.h:117
virtual void Close(void)
[操作] クローズ
Definition: TnbLzFile.h:126
virtual ~CLzFileReader(void)
デストラクタ
Definition: TnbLzFile.h:63
読み込み失敗発生例外
Definition: TnbException.h:241
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
Definition: TnbStr.h:954
void Empty(void)
[削除] 空化
Definition: TnbStr.h:197
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
Definition: TnbStr.h:914
ワークメモリテンプレート.
Definition: TnbDef.h:633
TNB::CStrT< TCHAR > CStr
文字列クラス
Definition: TnbStr.h:1785
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
Definition: TnbStrLib.h:367
TNB Library
Definition: TnbDoxyTitle.txt:2
読み込みインターフェース
Definition: TnbReader.h:36
ESeekMode
シークのオフセット指定モード
Definition: TnbReader.h:39
@ TOP
頭からのオフセット指定
Definition: TnbReader.h:40
@ CURRENT
現在位置からのオフセット指定
Definition: TnbReader.h:41
@ END
末からのオフセット指定
Definition: TnbReader.h:42