groupfile.cpp

Go to the documentation of this file.
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 //m_Files(NULL),
00010 m_nNumFiles(0),
00011 m_pFilePointer(NULL),
00012 m_nStatus(0)
00013 {
00014         //strncpy(m_sAuthorName, AuthorName, 12);
00015 
00016         memset(m_sFileName, 0, 255);
00017         strncpy(m_sFileName, filename, 255);
00018 
00019         Load();
00020 
00021 }
00022 
00023 
00024 GroupFile::GroupFile():
00025 //m_Files(NULL),
00026 m_nNumFiles(0),
00027 m_pFilePointer(NULL),
00028 m_nStatus(0)
00029 {
00030 }
00031 
00032 
00033 //Clean up
00034 GroupFile::~GroupFile()
00035 {
00036         //if(m_Files)
00037         //{
00038                 for(uint32 i = 0; i < m_nNumFiles; i++)
00039                 {
00040                         //TODO: Delete data for each file entry.
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                 //delete[] m_Files;
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                 //read name
00071                 fread(&m_sAuthorName , sizeof(char), 12, m_pFilePointer);
00072                 
00073                 //read file num
00074                 fread(&m_nNumFiles , sizeof(char), 4, m_pFilePointer);
00075         
00076                 //m_Files = new FILESTRUCT[m_nNumFiles];
00077                 m_Files.Grow(m_nNumFiles);
00078         
00079                 //Read in file header info
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                 //Read in file data
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                 //Write author name name
00114                 fwrite(&m_sAuthorName , sizeof(char), 12, m_pFilePointer);
00115                 
00116                 //Write file num
00117                 fwrite(&m_nNumFiles , sizeof(char), 4, m_pFilePointer);
00118         
00119                 //Write out file header info
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                 //Write out file data
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 

Generated on Sat Jan 11 23:36:56 2003 for Build-Lib by doxygen1.2.18