Exemplo n.º 1
0
void FileManager :: openFile(){
    fileBuffer = (char*)calloc(1,getSizeOfFile()-sizeOfHeader);

    const char* extBin = ".bin";
    std::string result = std::string(directory) +std::string(getNameOfFile()) + std::string(extBin);
    const char * FileNameBin = result.c_str();
    fstream fsr(FileNameBin, std::ios::out | std::ios::in | std::ios::binary );
    if(fsr){
        int temp = fsr.tellg();
        fsr.seekg(sizeOfHeader,ios::beg);
        fsr.read((char*)fileBuffer,getSizeOfFile()-sizeOfHeader );

        fsr.seekg(temp,ios::beg);
    }
    else{
        cout<<"no hay archivo"<<endl;    }

   fsr.close();
}
Exemplo n.º 2
0
void FileManager :: printHeader(){
    cout << "---------------------Header------------------------------------"<< endl;
      cout << "nombre de tabla : "<< getNameOfFile() << endl;
      cout << "tamaño archivo : "<< getSizeOfFile() << endl;
      cout << "num reg : "<< getNumberOfRegisters() << endl;
      cout << "num libres : "<< getNumberOfFreeRegisters() << endl;
      cout << "primer reg : "<< getPtrOfFirstRegister() << endl;
      cout << "primer libre : "<< getPtrToFirstRegisterFree() << endl;
      cout << "ultimo reg : "<< getPtrToLastRegister() << endl;
      cout << "tamañoRegistro : "<< getSizeOfRegister() << endl;
      cout << "num de columnas : "<< getNumberOfColumns() << endl;
       cout << "---------------------end-of-Header------------------------------------"<< endl;
}
Exemplo n.º 3
0
bool
checkFileSize(const char *filename, int min, int max)
{
    int filesize = getSizeOfFile(filename);
    
    if (filesize == -1)
        return false;
    
	if (min > 0 && filesize < min)
		return false;

	if (max > 0 && filesize > max)
		return false;

	return true;
}
Exemplo n.º 4
0
int main( int argc, char **argv )
{
	bool valid( false );
	
	if( argc == 2 )
	{
		unsigned int basicCheck = getSizeOfFile( argv[1] );

		if( basicCheck > 0 )
		{
			printf("Source:\t%s\n\n", argv[1] );
			TStream *patchFile;

			// If large-ish file, stream it
			if( basicCheck > ( 1 << 23 ) )
			{
				printf("WARNING: Large file!\n\n");
				patchFile = new TFileStream( argv[1] );
				valid = dynamic_cast<TFileStream *>( patchFile )->isOpen();
			}
			// Else, load it to memory
			else
			{
				patchFile = new TMemoryStream;
				valid = dynamic_cast<TMemoryStream *>( patchFile )->LoadFromFile( argv[1] );
			}

			if( valid )
				getMpfInfo( *patchFile );

			patchFile->Close();
			delete patchFile;
		}
	}
	
	if( !( valid ) )
		printf("Usage:\nmpfInfo <patchfile.mpf>\n\n");

	return 0;
}
Exemplo n.º 5
0
void FileManager :: addNewRegister(void* register_buffer ){

    const char* extBin = ".bin";
    std::string result = std::string(directory) +std::string(nameOfFile) + std::string(extBin);
    const char * FileNameBin = result.c_str();

    fstream fs(FileNameBin, std::ios::out | std::ios::in | std::ios::binary );
    if(fs){
        int temp = fs.tellp();//se guarda la posicion incial del seek
         fs.seekp (0, ios::end);//se coloca el seek al final del archivo

         //si el archivo esta vacio
        if(getSizeOfFile() == sizeOfHeader){
            setPtrOfFirstRegister(sizeOfHeader);
            setPtrToLastRegister(sizeOfHeader);
        }
        else{//si el archivo tiene mas de un registro


            //se solicita espacio para el ultimo registro a del archivo
            void* ultimoReg = calloc(1, *sizeOfRegister);
            //se coloca el seek al final del archivo
            fs.seekg(getPtrToLastRegister(), ios::beg);
            fs.seekp(getPtrToLastRegister(), ios::beg);
            //se lee el ultimo registro
            fs.read((char*)ultimoReg,*sizeOfRegister);

            //se obtiene el puntero en disco al siguiente
            int* ptr_al_siguiente = (int*)(ultimoReg + OFFSET_PTRSIG);
            //al ptr siguiente se desreferencia y se pone el puntero al final
            //más el tamaño del nuevo registro
            *ptr_al_siguiente = getPtrToLastRegister()+ *sizeOfRegister;
            //se coloca el puntero seek al final del archivopara agregar al final
            fs.seekg(getPtrToLastRegister(), ios::beg);
            fs.seekp(getPtrToLastRegister(), ios::beg);
            //se escribe en disco el ultimo registro
            fs.write(reinterpret_cast<const char*>(ultimoReg),getSizeOfRegister());


            //se apunta ptr_anterior al inicio del registro
            int* ptr_anterior = (int*)register_buffer;
            //tomo el ultimo reg y antes de guardar lo pongo como anterior
            *ptr_anterior = getPtrToLastRegister();
            //actualizo puntero al ultimo registro
            setPtrToLastRegister(fs.tellp());
        }

        fs.seekp (0, ios::end);//se coloca el seek al final del archivo
        //guardo el registro al final del archivo en disco
        fs.write(reinterpret_cast<const char*>(register_buffer),getSizeOfRegister());
        setNumberOfRegisters(getNumberOfRegisters() + 1);
        fs.seekp (0, ios::end);//se coloca el seek al final del archivo
        setSizeOfFile(fs.tellp());
        fs.seekp(temp,ios::end);//se recupera el seek original

    }
    else cout<<"Error 002 :No se puede añadir registro porque archivo no existe"<<endl;

   fs.close();//cierro el objeto fstream
   free(register_buffer); //libero el espacio que soliticte para el buffer
 }