xiofile.h
上传用户:pass2008
上传日期:2021-07-05
资源大小:3299k
文件大小:3k
源码类别:

Internet/IE编程

开发平台:

Visual C++

  1. #if !defined(__xiofile_h)
  2. #define __xiofile_h
  3. #include "xfile.h"
  4. //#include <TCHAR.h>
  5. class DLL_EXP CxIOFile : public CxFile
  6. {
  7. public:
  8. CxIOFile(FILE* fp = NULL)
  9. {
  10. m_fp = fp;
  11. m_bCloseFile = (bool)(fp==0);
  12. }
  13. ~CxIOFile()
  14. {
  15. Close();
  16. }
  17. //////////////////////////////////////////////////////////
  18. bool Open(LPCTSTR filename, LPCTSTR mode)
  19. {
  20. if (m_fp) return false; // Can't re-open without closing first
  21. m_fp = _tfopen(filename, mode);
  22. if (!m_fp) return false;
  23. m_bCloseFile = true;
  24. return true;
  25. }
  26. //////////////////////////////////////////////////////////
  27. virtual bool Close()
  28. {
  29. int iErr = 0;
  30. if ( (m_fp) && (m_bCloseFile) ){ 
  31. iErr = fclose(m_fp);
  32. m_fp = NULL;
  33. }
  34. return (bool)(iErr==0);
  35. }
  36. //////////////////////////////////////////////////////////
  37. virtual size_t Read(void *buffer, size_t size, size_t count)
  38. {
  39. if (!m_fp) return 0;
  40. return fread(buffer, size, count, m_fp);
  41. }
  42. //////////////////////////////////////////////////////////
  43. virtual size_t Write(const void *buffer, size_t size, size_t count)
  44. {
  45. if (!m_fp) return 0;
  46. return fwrite(buffer, size, count, m_fp);
  47. }
  48. //////////////////////////////////////////////////////////
  49. virtual bool Seek(long offset, int origin)
  50. {
  51. if (!m_fp) return false;
  52. return (bool)(fseek(m_fp, offset, origin) == 0);
  53. }
  54. //////////////////////////////////////////////////////////
  55. virtual long Tell()
  56. {
  57. if (!m_fp) return 0;
  58. return ftell(m_fp);
  59. }
  60. //////////////////////////////////////////////////////////
  61. virtual long Size()
  62. {
  63. if (!m_fp) return -1;
  64. long pos,size;
  65. pos = ftell(m_fp);
  66. fseek(m_fp, 0, SEEK_END);
  67. size = ftell(m_fp);
  68. fseek(m_fp, pos,SEEK_SET);
  69. return size;
  70. }
  71. //////////////////////////////////////////////////////////
  72. virtual bool Flush()
  73. {
  74. if (!m_fp) return false;
  75. return (bool)(fflush(m_fp) == 0);
  76. }
  77. //////////////////////////////////////////////////////////
  78. virtual bool Eof()
  79. {
  80. if (!m_fp) return true;
  81. return (bool)(feof(m_fp) != 0);
  82. }
  83. //////////////////////////////////////////////////////////
  84. virtual long Error()
  85. {
  86. if (!m_fp) return -1;
  87. return ferror(m_fp);
  88. }
  89. //////////////////////////////////////////////////////////
  90. virtual bool PutC(unsigned char c)
  91. {
  92. if (!m_fp) return false;
  93. return (bool)(fputc(c, m_fp) == c);
  94. }
  95. //////////////////////////////////////////////////////////
  96. virtual long GetC()
  97. {
  98. if (!m_fp) return EOF;
  99. return getc(m_fp);
  100. }
  101. //////////////////////////////////////////////////////////
  102. virtual char * GetS(char *string, int n)
  103. {
  104. if (!m_fp) return NULL;
  105. return fgets(string,n,m_fp);
  106. }
  107. //////////////////////////////////////////////////////////
  108. virtual long Scanf(const char *format, void* output)
  109. {
  110. if (!m_fp) return EOF;
  111. return fscanf(m_fp, format, output);
  112. }
  113. //////////////////////////////////////////////////////////
  114. protected:
  115. FILE *m_fp;
  116. bool m_bCloseFile;
  117. };
  118. #endif