XTMemFile.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:15k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTMemFile.h interface for the CXTMemFile class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTMEMFILE_H__)
  22. #define __XTMEMFILE_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //===========================================================================
  28. // Summary:
  29. //     CXTMemFile is a CMemFile derived class. It is used to create a CXTMemFile
  30. //     object to support memory files.
  31. // Remarks:
  32. //     These memory files behave like disk files except that the file is stored
  33. //     in RAM rather than on disk. A memory file is useful for fast temporary
  34. //     storage or for transferring raw bytes or serialized objects between
  35. //     independent processes.
  36. //
  37. //     CXTMemFile objects can automatically allocate their own memory, or you
  38. //     can attach your own memory block to the CXTMemFile object by calling
  39. //     Attach. In either case, memory for growing the memory file automatically
  40. //     is allocated in nGrowBytes-sized increments if 'nGrowBytes' is not zero.
  41. //
  42. //     The memory block will automatically be deleted upon destruction of the
  43. //     CXTMemFile object if the memory was originally allocated by the CXTMemFile
  44. //     object. Otherwise, you are responsible for de-allocating the memory you
  45. //     attached to the object.
  46. //
  47. //     You can access the memory block through the pointer supplied when you
  48. //     detach it from the CXTMemFile object by calling Detach.
  49. //
  50. //     The most common use of CXTMemFile is to create a CXTMemFile object and
  51. //     use it by calling CFile member functions. Note that creating a CXTMemFile
  52. //     automatically opens it: you do not call CFile::Open, which is only used
  53. //     for disk files. Because CXTMemFile doesn't use a disk file, the data
  54. //     member CFile::m_hFile is not used and has no meaning.
  55. //
  56. //     The CFile member functions Duplicate, LockRange, and UnlockRange are
  57. //     not implemented for CXTMemFile. If you call these functions on a CXTMemFile
  58. //     object, you will get a CNotSupportedException.
  59. //
  60. //     CXTMemFile uses the run-time library functions malloc, realloc, and
  61. //     free to allocate, reallocate, and deallocate memory and the intrinsic
  62. //     memcpy to block copy memory when reading and writing. If you would like
  63. //     to change this behavior or the behavior when CXTMemFile grows a file,
  64. //     derive your own class from CXTMemFile and override the appropriate functions.
  65. //===========================================================================
  66. class _XTP_EXT_CLASS CXTMemFile : public CMemFile
  67. {
  68. public:
  69. //-----------------------------------------------------------------------
  70. // Summary:
  71. //     Constructs a CXTMemFile object. This overload opens an empty memory
  72. //     file. Note that the file is opened by the constructor and that you
  73. //     should not call CFile::Open.
  74. // Parameters:
  75. //     nGrowBytes   - The memory allocation increment in bytes.
  76. //     lpBuffer     - Pointer to the buffer to be attached to CXTMemFile.
  77. //     nBufferSize  - An integer that specifies the size of the buffer in bytes.
  78. //     lpszFileName - A string that is the path to the desired file. The path can be relative,
  79. //                    absolute, or a network name (UNC).
  80. //     uiOpenFlags  - A UINT that defines the file's sharing and access mode. It specifies
  81. //                    the action to take when opening the file. You can combine options
  82. //                    by using the bitwise-OR (|) operator. One access permission and
  83. //                    one share option are required. The modeCreate and modeNoInherit modes
  84. //                    are optional. See the CFile constructor for a list of mode options.
  85. //     nGrowBytes   - The memory allocation increment in bytes.
  86. //-----------------------------------------------------------------------
  87. CXTMemFile(UINT nGrowBytes = 1024);
  88. CXTMemFile(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes = 0); // <combine CXTMemFile::CXTMemFile@UINT>
  89. CXTMemFile(LPCTSTR lpszFileName, UINT uiOpenFlags); // <combine CXTMemFile::CXTMemFile@UINT>
  90. //-----------------------------------------------------------------------
  91. // Summary:
  92. //     Destroys a CXTMemFile object, handles cleanup and deallocation
  93. //-----------------------------------------------------------------------
  94. virtual ~CXTMemFile();
  95. public:
  96. //-----------------------------------------------------------------------
  97. // Summary:
  98. //     This member function forces any data remaining in the file buffer
  99. //     to be written to the file. The use of Flush does not guarantee flushing
  100. //     of CArchive buffers. If you are using an archive, call CArchive::Flush
  101. //     first.
  102. //-----------------------------------------------------------------------
  103. virtual void Flush();
  104. #if _MSC_VER > 1200 //MFC 7.0
  105. using CMemFile::Open;
  106. #endif
  107. //-----------------------------------------------------------------------
  108. // Summary:
  109. //     This member function opens and loads a physical File into memory.
  110. // Parameters:
  111. //     lpszFileName - Specifies a NULL terminated string that is the path to the desired file.
  112. //     nOpenFlags   - Specifies a UINT that defines the sharing and access mode in the file.
  113. //                    It specifies the action to take when opening the file. You can combine
  114. //                    options by using the bitwise-OR (|) operator. One access permission
  115. //                    and one share option are required. The modeCreate and modeNoInherit
  116. //                    modes are optional. See the CFile constructor for a list of mode options.
  117. //     pError       - Specifies a pointer to an existing file-exception object that receives
  118. //                    the status of a failed operation.
  119. // Returns:
  120. //     true if successful, or false if it fails.
  121. //-----------------------------------------------------------------------
  122. virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
  123. //-----------------------------------------------------------------------
  124. // Summary:
  125. //     This member function saves the contents of the memory to the disk
  126. //     and closes it.
  127. //-----------------------------------------------------------------------
  128. virtual void Close();
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     This member function reads a string.
  132. // Parameters:
  133. //     rString - A CString reference to an object to receive the string that is read.
  134. // Returns:
  135. //     TRUE if successful, or FALSE if there is an error.
  136. //-----------------------------------------------------------------------
  137. virtual BOOL ReadString(CString& rString);
  138. //-----------------------------------------------------------------------
  139. // Summary:
  140. //     This method writes data from a buffer to the file associated with
  141. //     the CArchive object. The terminating null character, , is not written
  142. //     to the file, nor is a newline character automatically written.
  143. // Parameters:
  144. //     lpsz  - Specifies a pointer to a buffer containing a null-terminated text
  145. //             string.
  146. //-----------------------------------------------------------------------
  147. virtual void WriteString(LPCTSTR lpsz);
  148. #if _MSC_VER > 1200 //MFC 7.0
  149. using CMemFile::Duplicate;
  150. #endif //MFC 7.0
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     This member function will initialize the CXTMemFile object with
  154. //     the information specified in the 'fDuplicate' object.
  155. // Parameters:
  156. //     strDup - A NULL terminated string.
  157. //     fDuplicate - A pointer to a valid CFile object.
  158. // Returns:
  159. //     true if successful, otherwise returns false.
  160. //-----------------------------------------------------------------------
  161. virtual bool Duplicate(CFile* fDuplicate);
  162. virtual bool Duplicate(LPCTSTR strDup); // <combine CXTMemFile::Duplicate@CFile* >
  163. //-----------------------------------------------------------------------
  164. // Summary:
  165. //     This member function discards all changes to file since Open() or
  166. //     last Flush().
  167. // Returns:
  168. //     true if successful, otherwise returns false.
  169. //-----------------------------------------------------------------------
  170. virtual bool Discard();
  171. //-----------------------------------------------------------------------
  172. // Summary:
  173. //     This member function inserts any File and returns the length of the actual
  174. //     copied bytes.
  175. // Parameters:
  176. //     fSrc        - A pointer to a valid CFile object.
  177. //     strSrc      - Specifies a NULL terminated string that is the path to the desired
  178. //                   file.
  179. //     dwSourcePos - Represents the source file position.
  180. //     dwDestPos   - Represents the destination file position.
  181. //     dwBytes     - Number of bytes to insert.
  182. // Returns:
  183. //     A DWORD value that represents the length of the copied bytes.
  184. //-----------------------------------------------------------------------
  185. virtual DWORD Insert(CFile* fSrc, DWORD dwSourcePos, DWORD dwDestPos, DWORD dwBytes);
  186. virtual DWORD Insert(LPCTSTR strSrc, DWORD dwSourcePos, DWORD dwDestPos, DWORD dwBytes); // <combine CXTMemFile::Insert@CFile*@DWORD@DWORD@DWORD>
  187. //-----------------------------------------------------------------------
  188. // Summary:
  189. //     This member function extracts bytes to a file and returns the length
  190. //     of the actual copied bytes.
  191. // Parameters:
  192. //     fDest      - A pointer to a valid CFile object.
  193. //     strDest    - Specifies a NULL terminated string that is the path to the desired
  194. //                  file.
  195. //     dwStartPos - Represents the starting position.
  196. //     dwBytes    - Number of bytes to extract.
  197. // Returns:
  198. //     A DWORD value that represents the length of the copied bytes.
  199. //-----------------------------------------------------------------------
  200. virtual DWORD Extract(CFile* fDest, DWORD dwStartPos, DWORD dwBytes);
  201. virtual DWORD Extract(LPCTSTR strDest, DWORD dwStartPos, DWORD dwBytes); // <combine CXTMemFile::Extract@CFile*@DWORD@DWORD>
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     This member function finds data in the file.
  205. // Parameters:
  206. //     pData     - Pointer to the buffer to receive the data found.
  207. //     dwDataLen - Size of the data to find.
  208. //     lStartPos - Starting position.
  209. // Returns:
  210. //     A LONG data type.
  211. //-----------------------------------------------------------------------
  212. LONG FindData(void* pData, DWORD dwDataLen, LONG lStartPos);
  213. //-----------------------------------------------------------------------
  214. // Summary:
  215. //     This member operator will initialize the CXTMemFile object with
  216. //     the object specified by 'fDup'.
  217. // Parameters:
  218. //     fDup - A pointer to a valid CFile object.
  219. //-----------------------------------------------------------------------
  220. void operator=(CFile* fDup);
  221. //-----------------------------------------------------------------------
  222. // Summary:
  223. //     This member operator will initialize the CXTMemFile object with
  224. //     the object specified by 'strDup'.
  225. // Parameters:
  226. //     strDup - Specifies a NULL terminated string that is the path to the desired
  227. //              file.
  228. //-----------------------------------------------------------------------
  229. void operator=(CString strDup);
  230. //-----------------------------------------------------------------------
  231. // Summary:
  232. //     This member operator will adjust the file position.
  233. // Parameters:
  234. //     dwFilePos - DWORD value that specifies file position.
  235. //-----------------------------------------------------------------------
  236. void operator=(DWORD dwFilePos);
  237. //-----------------------------------------------------------------------
  238. // Summary:
  239. //     This member operator will append the CXTMemFile object with the object
  240. //     specified by 'fApp'.
  241. // Parameters:
  242. //     fApp - A pointer to a valid CFile object.
  243. //-----------------------------------------------------------------------
  244. void operator+=(CFile* fApp);
  245. //-----------------------------------------------------------------------
  246. // Summary:
  247. //     This member operator will append the CXTMemFile object with the object
  248. //     specified by 'strApp'.
  249. // Parameters:
  250. //     strApp - Specifies a NULL terminated string that is the path to the desired
  251. //              file.
  252. //-----------------------------------------------------------------------
  253. void operator+=(CString strApp);
  254. //-----------------------------------------------------------------------
  255. // Summary:
  256. //     This member operator will perform indexing operations for the CXTMemFile
  257. //     object. Returns a BYTE data type.
  258. // Parameters:
  259. //     dwFilePos - DWORD value that specifies file position.
  260. //-----------------------------------------------------------------------
  261. BYTE operator [](DWORD dwFilePos);
  262. protected:
  263. //-----------------------------------------------------------------------
  264. // Summary:
  265. //     This member function loads the file into memory.
  266. // Returns:
  267. //     true if successful, otherwise returns false.
  268. //-----------------------------------------------------------------------
  269. virtual bool Load();
  270. //-----------------------------------------------------------------------
  271. // Summary:
  272. //     This member function saves the file to disk.
  273. // Returns:
  274. //     true if successful, otherwise returns false.
  275. //-----------------------------------------------------------------------
  276. virtual bool Save();
  277. //-----------------------------------------------------------------------
  278. // Summary:
  279. //     This member function imports the data of a CFile derived object
  280. //     (operator=).
  281. // Parameters:
  282. //     fImp - A pointer to a valid CFile object.
  283. // Returns:
  284. //     true if successful, otherwise returns false.
  285. //-----------------------------------------------------------------------
  286. virtual bool Import(CFile* fImp);
  287. //-----------------------------------------------------------------------
  288. // Summary:
  289. //     This member function appends a CFile derived object to the file
  290. //     (operator+=).
  291. // Parameters:
  292. //     fApp - A pointer to a valid CFile object.
  293. // Returns:
  294. //     true if successful, otherwise returns false.
  295. //-----------------------------------------------------------------------
  296. virtual bool Append(CFile* fApp);
  297. private:
  298. // Unsupported APIs
  299. virtual CFile* Duplicate() const;
  300. private:
  301. UINT            m_uiOpenFlags;
  302. bool            m_bOpen;
  303. CFile           m_File;
  304. };
  305. #endif // #if !defined(__XTMEMFILE_H__)