Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #pragma once
00026 #ifndef __D_BINARY_FILE__
00027 #define __D_BINARY_FILE__
00028
00029 #include "DException.h"
00030 #include "FileModes.h"
00031 #include <fstream>
00032 using namespace std;
00033
00034 namespace DUtils {
00035
00036 class BinaryFile
00037 {
00038 public:
00039
00040
00041
00042 BinaryFile(void);
00043
00044
00045
00046 ~BinaryFile(void);
00047
00048
00049
00050
00051
00052
00053 BinaryFile(const char *filename, const FILE_MODES mode);
00054 BinaryFile(const string &filename, const FILE_MODES mode);
00055
00056
00057
00058
00059
00060 void OpenForReading(const char *filename);
00061 inline void OpenForReading(const string &filename)
00062 {
00063 OpenForReading(filename.c_str());
00064 }
00065
00066
00067
00068
00069
00070 void OpenForWriting(const char *filename);
00071 inline void OpenForWriting(const string &filename)
00072 {
00073 OpenForWriting(filename.c_str());
00074 }
00075
00076
00077
00078
00079
00080 void OpenForAppending(const char *filename);
00081 inline void OpenForAppending(const string &filename)
00082 {
00083 OpenForAppending(filename.c_str());
00084 }
00085
00086
00087
00088
00089
00090
00091 inline bool Eof();
00092
00093
00094
00095
00096 void Close();
00097
00102 inline void DiscardNextByte(){
00103 DiscardBytes(1);
00104 }
00105
00111 void DiscardBytes(int count);
00112
00117 unsigned int BytesRead();
00118
00119
00120
00121
00122 BinaryFile& operator<< (char v);
00123
00124
00125
00126
00127 BinaryFile& operator<< (int v);
00128
00129
00130
00131
00132 BinaryFile& operator<< (float v);
00133
00134
00135
00136
00137 BinaryFile& operator<< (double v);
00138
00139
00140
00141
00142 BinaryFile& operator>>(char &v);
00143
00144
00145
00146
00147 BinaryFile& operator>>(int &v);
00148
00149
00150
00151
00152 BinaryFile& operator>>(float &v);
00153
00154
00155
00156
00157 BinaryFile& operator>>(double &v);
00158
00159 protected:
00160
00167 void Init(const char *filename, const FILE_MODES mode);
00168
00172 void setEndianness();
00173
00179 void hton_f(float v, char buf[8]) const;
00180
00186 void hton_d(double d, char buf[8]) const;
00187
00193 float ntoh_f(char buf[8]) const;
00194
00200 double ntoh_d(char buf[8]) const;
00201
00206 inline bool isLittleEndian() const
00207 {
00208 return (m_is_little_endian == 1 ? true : false);
00209 }
00210
00211 protected:
00212 FILE_MODES m_mode;
00213 fstream m_f;
00214 char m_aux[8];
00215
00216
00217 int m_is_little_endian;
00218
00219 };
00220
00221 }
00222
00223 #endif