00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "gn/gnFileSource.h"
00014 #include <fstream>
00015 #include "gn/gnFilter.h"
00016
00017
00018 gnFileSource::gnFileSource(const gnFileSource& gnfs){
00019 m_openString = gnfs.m_openString;
00020 m_pFilter = gnfs.m_pFilter;
00021 m_newlineType = gnfs.m_newlineType;
00022 m_newlineSize = gnfs.m_newlineSize;
00023 m_ifstream.open( m_openString.c_str(), ios::in | ios::binary );
00024 if( !m_ifstream.is_open() )
00025 m_ifstream.clear();
00026 }
00027
00028
00029 void gnFileSource::Open( string openString )
00030 {
00031 m_ifstream.open(openString.c_str(), ios::in | ios::binary );
00032 if( m_ifstream.is_open() )
00033 {
00034 m_openString = openString;
00035 if( ParseStream(m_ifstream) )
00036 {
00037 ;
00038 }
00039 else{
00040 m_ifstream.clear();
00041 m_ifstream.close();
00042 }
00043 }else{
00044 m_ifstream.clear();
00045 Throw_gnEx(FileNotOpened());
00046 }
00047 }
00048 void gnFileSource::Open( )
00049 {
00050 m_ifstream.open( m_openString.c_str(), ios::in | ios::binary );
00051 if( !m_ifstream.is_open() ){
00052 m_ifstream.clear();
00053 Throw_gnEx(FileNotOpened());
00054 }
00055 }
00056 void gnFileSource::Close()
00057 {
00058 m_ifstream.close();
00059 if( m_ifstream.is_open() )
00060 Throw_gnEx(IOStreamFailed());
00061 }
00062
00063 boolean gnFileSource::Read( const uint64 pos, char* buf, uint32& bufLen)
00064 {
00065 m_ifstream.seekg(pos, ios::beg);
00066 m_ifstream.read(buf, bufLen);
00067 if(m_ifstream.fail()){
00068 m_ifstream.clear();
00069 return false;
00070 }
00071 return true;
00072 }
00073
00074 void gnFileSource::DetermineNewlineType()
00075 {
00076
00077 m_newlineType = gnNewlineUnix;
00078 m_newlineSize = 1;
00079
00080
00081 char buf[ BUFFER_SIZE ];
00082 m_ifstream.getline( buf, BUFFER_SIZE);
00083 m_ifstream.seekg(-2, ios::cur);
00084 m_ifstream.read( buf, 2);
00085 m_ifstream.seekg(0);
00086 if(buf[1] == '\n'){
00087 if(buf[0] == '\r'){
00088 m_newlineType = gnNewlineWindows;
00089 m_newlineSize = 2;
00090 }else{
00091 if(buf[1] == '\r')
00092 m_newlineType = gnNewlineMac;
00093 else
00094 m_newlineType = gnNewlineUnix;
00095 }
00096 }
00097 }