00001
00002
00003
00004
00005
00006 #include "vmsMemFile.h"
00007
00008 vmsMemFile::vmsMemFile()
00009 {
00010 m_pbFile = NULL;
00011 }
00012
00013 vmsMemFile::~vmsMemFile()
00014 {
00015 if (m_pbFile)
00016 delete [] m_pbFile;
00017 }
00018
00019 void vmsMemFile::Use(HANDLE hFile, BOOL bRead)
00020 {
00021 m_hFile = hFile;
00022 m_bRead = bRead;
00023 m_dwPos = 0;
00024
00025 if (m_pbFile)
00026 delete [] m_pbFile;
00027
00028 if (bRead)
00029 {
00030 m_dwSize = GetFileSize (m_hFile, NULL);
00031 m_pbFile = new BYTE [m_dwSize];
00032 DWORD dw;
00033 if (FALSE == ::ReadFile (m_hFile, m_pbFile, m_dwSize, &dw, NULL))
00034 throw _pszMemFileError;
00035 }
00036 else
00037 {
00038 m_dwSize = 100*1024;
00039 m_pbFile = new BYTE [m_dwSize];
00040 }
00041 }
00042
00043 void vmsMemFile::Done()
00044 {
00045 DWORD dw;
00046
00047 if (m_bRead == FALSE)
00048 if (FALSE == ::WriteFile (m_hFile, m_pbFile, m_dwPos, &dw, NULL))
00049 throw _pszMemFileError;
00050 }
00051
00052 LPBYTE vmsMemFile::get_FileBuffer()
00053 {
00054 return m_pbFile;
00055 }
00056
00057 DWORD vmsMemFile::get_FileBufferSize()
00058 {
00059 return m_bRead ? m_dwSize : m_dwPos;
00060 }
00061
00062 void vmsMemFile::ReadFile(LPVOID pb, DWORD dwSize)
00063 {
00064 if (m_dwSize < m_dwPos + dwSize)
00065 throw _pszMemFileError;
00066
00067 CopyMemory (pb, m_pbFile + m_dwPos, dwSize);
00068 m_dwPos += dwSize;
00069 }
00070
00071 void vmsMemFile::WriteFile(LPCVOID pb, DWORD dwSize)
00072 {
00073 if (m_dwSize < m_dwPos + dwSize)
00074 {
00075 LPBYTE pb = new BYTE [m_dwSize];
00076 CopyMemory (pb, m_pbFile, m_dwPos);
00077 delete [] m_pbFile;
00078 m_pbFile = pb;
00079 m_dwSize += dwSize + 100*1024;
00080 }
00081
00082 CopyMemory (m_pbFile + m_dwPos, pb, dwSize);
00083 m_dwPos += dwSize;
00084 }