TNB Library
TnbHttpFile.h
[詳解]
1#pragma once
11#include "TnbInternetHandle.h"
12#include "TnbReader.h"
13
14
15
16//TNB Library
17namespace TNB
18{
19
20
21
31{
32 CInternetHandle m_hWininet;
33 CInternetHandle m_hFile;
34 CStr m_strName;
35
36public:
37
42 virtual LPCTSTR GetOpenName(void) const
43 {
44 return m_strName;
45 }
46
56 bool Open(LPCTSTR lpszAgent, LPCTSTR lpszUrl, DWORD_PTR dwContext = 0)
57 {
58 Close();
59 if ( ! m_hWininet.Open(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0) )
60 {
61 return false;
62 }
63 const DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_RELOAD;
64 m_hFile = m_hWininet.OpenUrl(lpszUrl, NULL, 0, dwFlags, dwContext);
65 m_strName = lpszUrl;
66 return m_hFile.IsValid();
67 }
68
74 virtual bool CanRead(void) const
75 {
76 return m_hFile.IsValid();
77 }
78
86 virtual size_t Read(size_t size, LPVOID _P) const
87 {
88 DWORD dwRead;
89 if ( m_hFile.ReadFile(_P, size, &dwRead) )
90 {
91 return dwRead;
92 }
93 throw CReadFailureException(::GetLastError());
94 }
95
104 virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek = TOP) const
105 {
106 LARGE_INTEGER r;
107 r.QuadPart = llOffset;
108 if ( r.HighPart == 0 )
109 {
110 r.LowPart = m_hFile.SetFilePointer(r.LowPart, 0, eSeek, 0);
111 if ( r.LowPart == INVALID_SET_FILE_POINTER )
112 {
113 r.QuadPart = -1;
114 }
115 }
116 else
117 {
118 r.QuadPart = -1;
119 }
120 return r.QuadPart;
121 }
122
128 virtual LONGLONG GetSize(void) const
129 {
130 LONGLONG l = Seek(0, CURRENT);
131 LONGLONG r = Seek(0, END);
132 if ( l >= 0 )
133 {
134 Seek(l, TOP);
135 }
136 return r;
137 }
138
142 void Close(void)
143 {
144 m_hFile.Close();
145 m_hWininet.Close();
146 }
147
154 {
155 return m_hFile;
156 }
157};
158
159
160
161}; // TNB
162
163
164
INTERNETハンドル関係のヘッダ
ファイル関係のヘッダ
HTTPファイル読み込みクラス
Definition: TnbHttpFile.h:31
virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek=TOP) const
[操作] シーク.
Definition: TnbHttpFile.h:104
virtual size_t Read(size_t size, LPVOID _P) const
[取得] ファイル読み込み
Definition: TnbHttpFile.h:86
CInternetHandle & GetHandle(void)
[取得] ファイルハンドル取得
Definition: TnbHttpFile.h:153
virtual LONGLONG GetSize(void) const
[取得] サイズ取得
Definition: TnbHttpFile.h:128
virtual bool CanRead(void) const
[確認] 読み込み可能か
Definition: TnbHttpFile.h:74
void Close(void)
[設定] ファイルクローズ.
Definition: TnbHttpFile.h:142
virtual LPCTSTR GetOpenName(void) const
[取得] オープン名取得
Definition: TnbHttpFile.h:42
bool Open(LPCTSTR lpszAgent, LPCTSTR lpszUrl, DWORD_PTR dwContext=0)
[設定] ファイルオープン.
Definition: TnbHttpFile.h:56
INTERNETハンドル管理クラス
bool Open(LPCTSTR lpszAgent, DWORD dwAccessType, LPCTSTR lpszProxy=NULL, LPCTSTR lpszProxyBypass=NULL, DWORD dwFlags=0)
[設定] 初期化.
CInternetHandle OpenUrl(LPCTSTR lpszUrl, LPCTSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext=0)
[接続] 指定URL接続.
bool IsValid(void) const
[確認] ハンドル有効確認
bool ReadFile(LPVOID _lpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD _lpdwNumberOfBytesRead) const
[取得] ファイル読み込み.
void Close(void)
[設定] クローズ.
DWORD SetFilePointer(LONG lDistanceToMove, LONG *pReserved, DWORD dwMoveMethod, DWORD_PTR dwContext=0) const
[設定] ファイルポインタ設定.
読み込み失敗発生例外
Definition: TnbException.h:241
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