93 DWORD dwDesiredAccess;
95 DWORD dwCreationDisposition;
100 dwDesiredAccess = GENERIC_READ;
101 dwCreationDisposition = OPEN_EXISTING;
102 dwShareMode = isShare ? (FILE_SHARE_READ) : 0;
103 m_boCanWrite =
false;
106 dwDesiredAccess = GENERIC_WRITE;
107 dwCreationDisposition = OPEN_ALWAYS;
108 dwShareMode = isShare ? (FILE_SHARE_WRITE) : 0;
111 dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
112 dwCreationDisposition = OPEN_ALWAYS;
113 dwShareMode = isShare ? (FILE_SHARE_READ | FILE_SHARE_WRITE) : 0;
116 dwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
117 dwCreationDisposition = CREATE_ALWAYS;
118 dwShareMode = isShare ? (FILE_SHARE_READ | FILE_SHARE_WRITE) : 0;
121 SetHandle(ApiCreateFile(lpszName, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, m_attributes, NULL));
122 if (
GetHandle() != INVALID_HANDLE_VALUE )
136 return GetHandle() != INVALID_HANDLE_VALUE;
146 return CanRead() && m_boCanWrite;
158 bool r = !! ApiGetFileInformationByHandle(
GetHandle(), _lpFileInformation);
170 ::SetLastError(NO_ERROR);
172 r.LowPart = ApiGetFileSize(
GetHandle(), &r.HighPart);
173 if ( ::GetLastError() != NO_ERROR )
177 return static_cast<LONGLONG
>(r.QuadPart);
192 r.QuadPart = llOffset;
193 r.LowPart = ApiSetFilePointer(
GetHandle(), r.LowPart, &r.HighPart, eSeek);
194 if ( r.LowPart == INVALID_SET_FILE_POINTER )
196 if ( ::GetLastError() != NO_ERROR )
211 size_t Read(
size_t size, LPVOID _P)
const
213 if ( size > ULONG_MAX )
230 operator HANDLE(
void)
const
266 virtual BOOL ApiGetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
const
268 return ::GetFileInformationByHandle(hFile, lpFileInformation);
271 virtual HANDLE ApiCreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes,
272 DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
274 return ::CreateFile(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
277 virtual DWORD ApiGetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
const
279 return ::GetFileSize(hFile, lpFileSizeHigh);
282 virtual DWORD ApiSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod)
const
284 return ::SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod);
287 virtual BOOL ApiReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
const
289 return ::ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
292 virtual BOOL ApiSetFileTime(HANDLE hFile, CONST ::FILETIME *lpCreationTime, CONST ::FILETIME *lpLastAccessTime, CONST ::FILETIME *lpLastWriteTime)
294 return ::SetFileTime(hFile, lpCreationTime, lpLastAccessTime, lpLastWriteTime);
297 virtual BOOL ApiSetEndOfFile(HANDLE hFile)
299 return ::SetEndOfFile(hFile);
302 virtual BOOL ApiWriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped)
304 return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped);
364 bool Open(LPCTSTR lpszName,
bool boIsShare =
true,
bool boDummy =
false)
420 virtual size_t Read(
size_t size, LPVOID _P)
const
436 if ( fr.Open(lpszFileName) )
440 _content = fr.ReadInto();
501 bool New(LPCTSTR lpszName,
bool boIsShare =
true)
516 bool Open(LPCTSTR lpszName,
bool boIsShare =
true,
bool boIsBottom =
true)
519 if ( r && boIsBottom )
587 virtual size_t Read(
size_t size, LPVOID _P)
const
601 BOOL r = ApiSetFileTime(
GetHandle(), &timeCreation, &timeLastAccess, &timeLastWrite);
628 virtual void Write(
size_t size, LPCVOID P)
630 if ( size >= ULONG_MAX )
636 DWORD dwError = boRc ? 0 : ::GetLastError();
637 if ( ! boRc || size != dwWrite )
655 if ( fw.New(lpszFileName,
false) )
681 if ( fw.Open(lpszFileName,
false,
true) )
712 wr.
Write(
sizeof(DWORD), &dwLen);
713 wr.
Write(
sizeof(DWORD), &dwLen);
714 wr.
Write(dwLen, LPCSTR(asc));
719 for (
size_t i = 0; i < size; i++ )
721 wSum =
static_cast<WORD
>(wSum + *B++);
724 wr.
Write(
sizeof(
size_t), &size);
726 wr.
Write(
sizeof(WORD), &wSum);
743 if ( ! fw.
New(lpszFile,
false) )
772 if ( dwLen1 != dwLen2 )
793 for (
size_t i = 0; i < size; i++ )
795 wSum =
static_cast<WORD
>(wSum + *B++);
797 if ( wFileSum != wSum )
819 if ( ! fr.
Open(lpszFile) )
bool GetInformation(LPBY_HANDLE_FILE_INFORMATION _lpFileInformation) const
[取得] ファイル情報取得
bool OpenOnMode(LPCTSTR lpszName, EMode eMode=ACCESS, bool isShare=true)
[操作] モード付オープン
LPCTSTR GetOpenName(void) const
[取得] オープン名取得
bool CanRead(void) const
[確認] 読み込み可能か
size_t Read(size_t size, LPVOID _P) const
[取得] ファイル読み込み
@ ACCESS
読み書きオープン(既存でなければ作成されます)
@ CREATE
新規読み書きオープン(既存ファイルは消されます)
@ WRITE
書き込みオープン(既存でなければ作成されます)
@ READ
読み込みオープン(既存でなければエラーになります)
CAbstractFile(void)
コンストラクタ
void Close(void)
[操作] クローズ
virtual ~CAbstractFile(void)
デストラクタ
LONGLONG GetSize(void) const
[取得] ファイルサイズ取得
virtual HANDLE GetHandle(void) const
[取得] ファイルハンドル取得
void SetCreatedAttributes(DWORD attr)
[設定] 属性設定.
bool CanWrite(void) const
[確認] 書込み可能か
virtual void SetHandle(HANDLE h)
[設定] ファイルハンドル設定
LONGLONG Seek(LONGLONG llOffset, IReader::ESeekMode eSeek=IReader::TOP) const
[操作] シーク.
virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek=TOP) const
[操作] シーク.
virtual size_t Read(size_t size, LPVOID _P) const
[取得] ファイル読み込み
bool Open(LPCTSTR lpszName, bool boIsShare=true, bool boDummy=false)
[操作] オープン
virtual LONGLONG GetSize(void) const
[取得] ファイルサイズ取得
virtual bool CanRead(void) const
[確認] 読み込み可能か
virtual LPCTSTR GetOpenName(void) const
[取得] オープン名取得
virtual void Close(void)
[操作] クローズ
static bool ReadAll(CByteVector &_content, LPCTSTR lpszFileName, CFileReader &fr=CFileReader())
[取得] ファイル全読み込み.
static bool AddFile(LPCTSTR lpszFileName, size_t size, LPCVOID P, CFileWriter &fw=CFileWriter())
[保存] ファイル追加.
virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek=TOP) const
[操作] シーク.
virtual size_t Read(size_t size, LPVOID _P) const
[取得] ファイル読み込み
bool Open(LPCTSTR lpszName, bool boIsShare=true, bool boIsBottom=true)
[操作] オープン.
void SetTime(const CFileTimeEx &timeCreation, const CFileTimeEx &timeLastAccess, const CFileTimeEx &timeLastWrite)
[設定] ファイル日付設定
virtual LONGLONG GetSize(void) const
[取得] ファイルサイズ取得
bool New(LPCTSTR lpszName, bool boIsShare=true)
[操作] 新規オープン.
virtual bool CanRead(void) const
[確認] 読み込み可能か
static bool NewFile(LPCTSTR lpszFileName, size_t size, LPCVOID P, CFileWriter &fw=CFileWriter())
[保存] ファイル作成.
virtual LPCTSTR GetOpenName(void) const
[取得] オープン名取得
virtual void Close(void)
[操作] クローズ
virtual void Write(size_t size, LPCVOID P)
[保存] ファイル書き込み
virtual void SetEnd(void)
[設定] EOFを指定.
virtual bool CanWrite(void) const
[確認] 書込み可能か
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
size_t GetLength(void) const
[取得] 文字列長
bool IsEqual(const TYP *lpszSubject) const
[確認] 文字列比較
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
TYP * GetBuffer(size_t size=0)
[操作] データアドレス取得
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
void LoadCollection(const IReader &rr, LPCTSTR lpszHead, CVectorT< BYTE > &_vb)
[保存] コレクション読み込み
void SaveCollection(IWriter &wr, LPCTSTR lpszHead, const ISequenceCollectionT< BYTE > &c)
[保存] BYTEコレクション書き込み
DWORD ToDword(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
void ReadExactly(size_t size, LPVOID _P) const
[取得] 読み込み.
virtual const TYP * ReferBuffer(void) const =0
[取得] データアドレス取得.
virtual size_t GetSize(void) const =0
[取得] 要素数取得.
virtual void Write(size_t size, LPCVOID P)=0
[保存] 書き込み