xiofile.h
上传用户:gnaf34
上传日期:2022-04-22
资源大小:1657k
文件大小:3k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

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