utiles_v2017/b_file.h

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;
}
//******************************************************************************************************************
};