00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <stdarg.h>
00031 #include <sys/types.h>
00032 #include <sys/stat.h>
00033
00034 #include "File.h"
00035
00036 #ifdef SOCKETS_NAMESPACE
00037 namespace SOCKETS_NAMESPACE {
00038 #endif
00039
00040
00041 File::File()
00042 :m_fil(NULL)
00043 ,m_rptr(0)
00044 ,m_wptr(0)
00045 {
00046 }
00047
00048
00049 File::~File()
00050 {
00051 fclose();
00052 }
00053
00054
00055 bool File::fopen(const std::string& path, const std::string& mode)
00056 {
00057 m_path = path;
00058 m_mode = mode;
00059 m_fil = ::fopen(path.c_str(), mode.c_str());
00060
00061 return m_fil ? true : false;
00062 }
00063
00064
00065 void File::fclose() const
00066 {
00067 if (m_fil)
00068 {
00069 ::fclose(m_fil);
00070 m_fil = NULL;
00071 }
00072 }
00073
00074
00075
00076 size_t File::fread(char *ptr, size_t size, size_t nmemb) const
00077 {
00078 size_t r = 0;
00079 if (m_fil)
00080 {
00081 fseek(m_fil, m_rptr, SEEK_SET);
00082 r = ::fread(ptr, size, nmemb, m_fil);
00083 m_rptr = ftell(m_fil);
00084 }
00085 return r;
00086 }
00087
00088
00089 size_t File::fwrite(const char *ptr, size_t size, size_t nmemb)
00090 {
00091 size_t r = 0;
00092 if (m_fil)
00093 {
00094 fseek(m_fil, m_wptr, SEEK_SET);
00095 r = ::fwrite(ptr, size, nmemb, m_fil);
00096 m_wptr = ftell(m_fil);
00097 }
00098 return r;
00099 }
00100
00101
00102
00103 char *File::fgets(char *s, int size) const
00104 {
00105 char *r = NULL;
00106 if (m_fil)
00107 {
00108 fseek(m_fil, m_rptr, SEEK_SET);
00109 r = ::fgets(s, size, m_fil);
00110 m_rptr = ftell(m_fil);
00111 }
00112 return r;
00113 }
00114
00115
00116 void File::fprintf(const char *format, ...)
00117 {
00118 if (!m_fil)
00119 return;
00120 va_list ap;
00121 va_start(ap, format);
00122 fseek(m_fil, m_rptr, SEEK_SET);
00123 vfprintf(m_fil, format, ap);
00124 m_rptr = ftell(m_fil);
00125 va_end(ap);
00126 }
00127
00128
00129 off_t File::size() const
00130 {
00131 struct stat st;
00132 if (stat(m_path.c_str(), &st) == -1)
00133 {
00134 return 0;
00135 }
00136 return st.st_size;
00137 }
00138
00139
00140 bool File::eof() const
00141 {
00142 if (m_fil)
00143 {
00144 if (feof(m_fil))
00145 return true;
00146 }
00147 return false;
00148 }
00149
00150
00151 void File::reset_read() const
00152 {
00153 m_rptr = 0;
00154 }
00155
00156
00157 void File::reset_write()
00158 {
00159 m_wptr = 0;
00160 }
00161
00162
00163 #ifdef SOCKETS_NAMESPACE
00164 }
00165 #endif
00166
00167