Files
mir_server/sdk/utils/HandleStream.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

86 lines
2.0 KiB
C++

#include "_osdef.h"
#include "Stream.h"
using namespace wylib::stream;
#ifdef WIN32
CHandleStream::CHandleStream(HANDLE StreamHandle)
#else
CHandleStream::CHandleStream(int StreamHandle)
#endif
:Inherited()
{
m_hHandle = StreamHandle;
}
#ifdef WIN32
void CHandleStream::setHandle(HANDLE Handle)
#else
void CHandleStream::setHandle(int Handle)
#endif
{
m_hHandle = Handle;
}
bool CHandleStream::setSize(LONGLONG tSize)
{
#ifdef WIN32
seek( tSize, soBeginning );
return SetEndOfFile( m_hHandle ) != FALSE;
#else
return ftruncate(m_hHandle, lseek(m_hHandle, tSize, SEEK_SET)) == 0;
#endif
}
LONGLONG CHandleStream::seek(const LONGLONG tOffset, const int Origin)
{
#ifdef WIN32
LARGE_INTEGER li, nNewPointer;
li.QuadPart = tOffset;
if ( SetFilePointerEx( m_hHandle, li, &nNewPointer, Origin ) )
return (LONGLONG)nNewPointer.QuadPart;
else return -1;
#else
if( Origin == soBeginning )
return ( LONGLONG )lseek( m_hHandle, tOffset, SEEK_SET ) ;
else if( Origin == soCurrent )
return ( LONGLONG )lseek( m_hHandle, tOffset, SEEK_CUR ) ;
else if( Origin == soEnd )
return ( LONGLONG )lseek( m_hHandle, tOffset, SEEK_END ) ;
else
return -1;
#endif
}
LONGLONG CHandleStream::read(LPVOID lpBuffer, const LONGLONG tSizeToRead)
{
DWORD dwBytesReaded;
#ifdef WIN32
if ( ReadFile( m_hHandle, lpBuffer, (DWORD)tSizeToRead, &dwBytesReaded, NULL ) )
return dwBytesReaded;
else return -1;
#else
dwBytesReaded = ::read( m_hHandle, lpBuffer, (int)tSizeToRead) ;
if(dwBytesReaded > 0)
return dwBytesReaded;
else return -1;
#endif
}
LONGLONG CHandleStream::write(LPCVOID lpBuffer, const LONGLONG tSizeToWrite)
{
DWORD dwBytesWriten;
#ifdef WIN32
if ( WriteFile( m_hHandle, lpBuffer, (DWORD)tSizeToWrite, &dwBytesWriten, NULL ) )
return dwBytesWriten;
else return -1;
#else
dwBytesWriten = ::write( m_hHandle, lpBuffer, (int)tSizeToWrite);
if(dwBytesWriten > 0)
return dwBytesWriten;
else return -1;
#endif
}