176 lines
4.8 KiB
C++
176 lines
4.8 KiB
C++
#pragma once
|
|
#include "base_head.h"
|
|
#include "_error.h"
|
|
#include "utiles_def.h"
|
|
class UTILES_EXPORT Cb_file: public IdataTransfer//manejo de archivos binarios
|
|
{
|
|
private:
|
|
HANDLE hfile;//hanled del archivo
|
|
LARGE_INTEGER li;//se usa para dividir enteros de 64
|
|
DWORD dw;//bites movidos y respuestas al escribir
|
|
public:
|
|
C_error *er;
|
|
|
|
Cb_file(void);
|
|
~Cb_file(void);
|
|
//******************************************************************************************************************
|
|
//funciones--------------------------------------------------------------------
|
|
//******************************************************************************************************************
|
|
inline BOOL abierto()
|
|
{
|
|
return hfile != INVALID_HANDLE_VALUE;
|
|
};
|
|
//******************************************************************************************************************
|
|
BOOL abre(char* path,int modo, BOOL sobre_escri=FALSE, BOOL shared=FALSE);//modo 1 lectura modo 2 escritura modo 3 ambos
|
|
//******************************************************************************************************************
|
|
inline void cierra()//cierra archivo;
|
|
{
|
|
if (hfile != INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hfile);
|
|
hfile=INVALID_HANDLE_VALUE;
|
|
}
|
|
}
|
|
//******************************************************************************************************************
|
|
QWORD size();//te devuelve el tamaño del archivo en bytes
|
|
//******************************************************************************************************************
|
|
inline BOOL lee(void* buf,int nb)//lee un numero de bites y lo pone en buf
|
|
{
|
|
if (!ReadFile(hfile, (LPSTR) buf ,nb,&dw,NULL))
|
|
{
|
|
if (er)
|
|
er->pon_win("Cb_file");
|
|
//cierra---------------------
|
|
if (hfile != INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hfile);
|
|
hfile=INVALID_HANDLE_VALUE;
|
|
}
|
|
//---------------------------
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
//******************************************************************************************************************
|
|
inline BOOL escribe(void* buf,int nb)//escribe numero de bites
|
|
{
|
|
if (!WriteFile(hfile, (LPSTR) buf ,nb,&dw,NULL))
|
|
{
|
|
if (er)
|
|
er->pon_win("Cb_file");
|
|
//cierra---------------------
|
|
if (hfile != INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hfile);
|
|
hfile=INVALID_HANDLE_VALUE;
|
|
}
|
|
//---------------------------
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
//******************************************************************************************************************
|
|
inline BOOL irAfin()//va a la posicion del final del archivo
|
|
{
|
|
dw=SetFilePointer(hfile,0,NULL,FILE_END);
|
|
if(dw==INVALID_SET_FILE_POINTER)
|
|
{
|
|
if (er)
|
|
er->pon_win("Cb_file");
|
|
//cierra---------------------
|
|
if (hfile != INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hfile);
|
|
hfile=INVALID_HANDLE_VALUE;
|
|
}
|
|
//---------------------------
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
//******************************************************************************************************************
|
|
BOOL irAini(int nb=0)//va al inicio del archivo + nb bytes;
|
|
{
|
|
|
|
dw=SetFilePointer(hfile,nb,NULL,FILE_BEGIN);
|
|
if(dw==INVALID_SET_FILE_POINTER)
|
|
{
|
|
if (er)
|
|
er->pon_win("Cb_file");
|
|
//cierra---------------------
|
|
if (hfile != INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hfile);
|
|
hfile=INVALID_HANDLE_VALUE;
|
|
}
|
|
//---------------------------
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
//******************************************************************************************************************
|
|
BOOL irA(int nb=0)//salta nbites;
|
|
{
|
|
|
|
dw=SetFilePointer(hfile,nb,NULL,FILE_CURRENT);
|
|
if(dw==INVALID_SET_FILE_POINTER)
|
|
{
|
|
if (er)
|
|
er->pon_win("Cb_file");
|
|
//cierra---------------------
|
|
if (hfile != INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hfile);
|
|
hfile=INVALID_HANDLE_VALUE;
|
|
}
|
|
//---------------------------
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
//******************************************************************************************************************
|
|
inline BOOL irAini( QWORD nb)//entero de 64 bytes
|
|
{
|
|
li.QuadPart = nb;
|
|
dw=SetFilePointer(hfile,li.LowPart,&li.HighPart,FILE_BEGIN);
|
|
if(dw==INVALID_SET_FILE_POINTER)
|
|
{
|
|
if (er)
|
|
er->pon_win("Cb_file");
|
|
//cierra---------------------
|
|
if (hfile != INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hfile);
|
|
hfile=INVALID_HANDLE_VALUE;
|
|
}
|
|
//---------------------------
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
virtual __int64 getNB_it()
|
|
{
|
|
return size();
|
|
}
|
|
|
|
virtual __int64 getNext_it( void* buf,__int64 nb )
|
|
{
|
|
if(lee(buf,(int)nb))
|
|
return nb;
|
|
return -1;
|
|
}
|
|
|
|
virtual bool setPosition_it( __int64 nb )
|
|
{
|
|
return irAini((int)nb) ==TRUE;
|
|
}
|
|
|
|
virtual bool set_it( void* buf, __int64 nb )
|
|
{
|
|
return escribe(buf,(int)nb) == TRUE;
|
|
}
|
|
//******************************************************************************************************************
|
|
|
|
};
|