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