00001 #include "stdafx.h"
00002 #include "groupfile.h"
00003 #include <string.h>
00004 #include <memory.h>
00005
00006 #define NO_ERRORS 0
00007
00008 GroupFile::GroupFile(const char* filename):
00009
00010 m_nNumFiles(0),
00011 m_pFilePointer(NULL),
00012 m_nStatus(0)
00013 {
00014
00015
00016 memset(m_sFileName, 0, 255);
00017 strncpy(m_sFileName, filename, 255);
00018
00019 Load();
00020
00021 }
00022
00023
00024 GroupFile::GroupFile():
00025
00026 m_nNumFiles(0),
00027 m_pFilePointer(NULL),
00028 m_nStatus(0)
00029 {
00030 }
00031
00032
00033
00034 GroupFile::~GroupFile()
00035 {
00036
00037
00038 for(uint32 i = 0; i < m_nNumFiles; i++)
00039 {
00040
00041 if(m_Files[i].data != NULL)
00042 {
00043 delete[] m_Files[i].data;
00044 m_Files[i].data = NULL;
00045 }
00046
00047 }
00048
00049
00050
00051 }
00052
00053 int GroupFile::Open(const char* sFlags)
00054 {
00055
00056 m_pFilePointer = fopen(m_sFileName, sFlags);
00057 if(m_pFilePointer == NULL)
00058 {
00059 return 1;
00060 }
00061
00062 return 0;
00063 }
00064
00065 int GroupFile::Load()
00066 {
00067 if (Open("rb") == NO_ERRORS)
00068 {
00069
00070
00071 fread(&m_sAuthorName , sizeof(char), 12, m_pFilePointer);
00072
00073
00074 fread(&m_nNumFiles , sizeof(char), 4, m_pFilePointer);
00075
00076
00077 m_Files.Grow(m_nNumFiles);
00078
00079
00080 uint32 i = 0;
00081 for(i = 0; i < m_nNumFiles; i++)
00082 {
00083 fread(&m_Files[i].fileheader.name[0], sizeof(char), 12, m_pFilePointer);
00084 fread(&m_Files[i].fileheader.size, sizeof(char), 4, m_pFilePointer);
00085 }
00086
00087
00088 for(i = 0; i < m_nNumFiles; i++)
00089 {
00090 uint32 nFileSize = m_Files[i].fileheader.size;
00091 m_Files[i].data = new unsigned char[nFileSize];
00092 if(m_Files[i].data != NULL)
00093 {
00094 fread(&m_Files[i].data[0], sizeof(char), nFileSize, m_pFilePointer);
00095 }
00096 }
00097
00098 Close();
00099 }
00100 else
00101 {
00102 return 1;
00103 }
00104
00105 return 0;
00106 }
00107
00108 int GroupFile::Save()
00109 {
00110 if (Open("wb") == NO_ERRORS)
00111 {
00112
00113
00114 fwrite(&m_sAuthorName , sizeof(char), 12, m_pFilePointer);
00115
00116
00117 fwrite(&m_nNumFiles , sizeof(char), 4, m_pFilePointer);
00118
00119
00120 uint32 i = 0;
00121 for(i = 0; i < m_nNumFiles; i++)
00122 {
00123 fwrite(&m_Files[i].fileheader.name[0], sizeof(char), 12, m_pFilePointer);
00124 fwrite(&m_Files[i].fileheader.size, sizeof(char), 4, m_pFilePointer);
00125
00126 }
00127
00128
00129 for(i = 0; i < m_nNumFiles; i++)
00130 {
00131 uint32 nFileSize = m_Files[i].fileheader.size;
00132 fwrite(&m_Files[i].data[0], sizeof(char), nFileSize, m_pFilePointer);
00133 }
00134
00135 fflush(m_pFilePointer);
00136
00137 Close();
00138 }
00139 else
00140 {
00141 return 1;
00142 }
00143
00144 return 0;
00145 }
00146
00147 int GroupFile::Close()
00148 {
00149 if(m_pFilePointer)
00150 {
00151 fclose(m_pFilePointer);
00152 }
00153
00154 return 0;
00155 }
00156
00157
00158 void GroupFile::SetFilename(const char* sFilename)
00159 {
00160 if(sFilename[0] != '\0')
00161 {
00162 memset(m_sFileName, 0, 255);
00163 sprintf(m_sFileName, "%s", sFilename);
00164 }
00165 }
00166