File.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include <ndb_global.h>
  14. #include <File.hpp>
  15. #include <NdbOut.hpp>
  16. #include <my_dir.h>
  17. //
  18. // PUBLIC
  19. //
  20. bool 
  21. File_class::exists(const char* aFileName)
  22. {
  23.   MY_STAT stmp;
  24.   return (my_stat(aFileName, &stmp, MYF(0))!=NULL);
  25. }
  26. long
  27. File_class::size(FILE* f)
  28. {
  29.   long cur_pos = 0, length = 0;
  30.   
  31.   cur_pos = ::ftell(f);
  32.   ::fseek(f, 0, SEEK_END); 
  33.   length = ::ftell(f); 
  34.   ::fseek(f, cur_pos, SEEK_SET); // restore original position
  35.   return length;
  36. }
  37. bool 
  38. File_class::rename(const char* currFileName, const char* newFileName)
  39. {
  40.   return ::rename(currFileName, newFileName) == 0 ? true : false;
  41. }
  42. bool 
  43. File_class::remove(const char* aFileName)
  44. {
  45.   return ::remove(aFileName) == 0 ? true : false;
  46. }
  47. File_class::File_class() : 
  48.   m_file(NULL), 
  49.   m_fileMode("r")
  50. {
  51. }
  52. File_class::File_class(const char* aFileName, const char* mode) :
  53.   m_file(NULL), 
  54.   m_fileMode(mode)
  55. {
  56.   BaseString::snprintf(m_fileName, MAX_FILE_NAME_SIZE, aFileName);
  57. }
  58. bool
  59. File_class::open()
  60. {
  61.   return open(m_fileName, m_fileMode);
  62. }
  63. bool 
  64. File_class::open(const char* aFileName, const char* mode) 
  65. {
  66.   if(m_fileName != aFileName){
  67.     /**
  68.      * Only copy if it's not the same string
  69.      */
  70.     BaseString::snprintf(m_fileName, MAX_FILE_NAME_SIZE, aFileName);
  71.   }
  72.   m_fileMode = mode;
  73.   bool rc = true;
  74.   if ((m_file = ::fopen(m_fileName, m_fileMode))== NULL)
  75.   {
  76.     rc = false;      
  77.   }
  78.   
  79.   return rc;
  80. }
  81. File_class::~File_class()
  82. {
  83.   close();  
  84. }
  85. bool 
  86. File_class::remove()
  87. {
  88.   // Close the file first!
  89.   close();
  90.   return File_class::remove(m_fileName);
  91. }
  92. bool 
  93. File_class::close()
  94. {
  95.   bool rc = true;
  96.   if (m_file != NULL)
  97.   { 
  98.     ::fflush(m_file);
  99.     rc = (::fclose(m_file) == 0 ? true : false);
  100.     m_file = NULL; // Try again?
  101.   }  
  102.   
  103.   return rc;
  104. }
  105. int 
  106. File_class::read(void* buf, size_t itemSize, size_t nitems) const
  107. {
  108.   return ::fread(buf, itemSize,  nitems, m_file);
  109. }
  110. int 
  111. File_class::readChar(char* buf, long start, long length) const
  112. {
  113.   return ::fread((void*)&buf[start], 1, length, m_file);
  114. }
  115. int 
  116. File_class::readChar(char* buf)
  117. {
  118.   return readChar(buf, 0, strlen(buf));
  119. }
  120. int 
  121. File_class::write(const void* buf, size_t size, size_t nitems)
  122. {
  123.   return ::fwrite(buf, size, nitems, m_file);
  124. }
  125.  
  126. int
  127. File_class::writeChar(const char* buf, long start, long length)
  128. {
  129.   return ::fwrite((const void*)&buf[start], sizeof(char), length, m_file);
  130. }
  131. int 
  132. File_class::writeChar(const char* buf)
  133. {
  134.   return writeChar(buf, 0, ::strlen(buf));
  135. }
  136.    
  137. long 
  138. File_class::size() const
  139. {
  140.   return File_class::size(m_file);
  141. }
  142. const char* 
  143. File_class::getName() const
  144. {
  145.   return m_fileName;
  146. }
  147. int
  148. File_class::flush() const
  149. {
  150. #if defined NDB_OSE || defined NDB_SOFTOSE
  151.   ::fflush(m_file);
  152.   return ::fsync(::fileno(m_file));
  153. #else
  154.   return 0;
  155. #endif
  156. }
  157. //
  158. // PRIVATE
  159. //