void FileClose(HANDLE handle);
int FileOpenRead(const wchar_t* fileName,HANDLE* outHandle);
int FileOpenWrite(const wchar_t* fileName,HANDLE* outHandle);
int FileRead(HANDLE fileHandle,void* buffer,size_t count,size_t* bytesRead);
int FileWrite(HANDLE fileHandle,const void* buffer,size_t count,size_t* bytesWritten);
int FileSetSize(HANDLE fileHandle,uint64_t length);
int FilePointer(HANDLE fileHandle,uint64_t offset,int method,uint64_t* newOffset);
uint64_t FileGetPointer(HANDLE fileHandle);
void FileSetPointer(HANDLE fileHandle,uint64_t offset);
uint64_t FileGetSize(HANDLE fileHandle);
int64_t FileGetTime(HANDLE fileHandle);
int FileSetTime(HANDLE fileHandle,int64_t fileTime);
int FileCreateSocket(int bidir,int async,HANDLE* outHandle1,HANDLE* outHandle2);
int FileCreatePipe(HANDLE* read,HANDLE* write);
int FileGetTime2(const wchar_t* fileName,int64_t* outWriteTime);
inline void FileCleanup(HANDLE* handle)
{
if(*handle != INVALID_HANDLE_VALUE)
{
CloseHandle(*handle);
*handle = INVALID_HANDLE_VALUE;
}
}
inline void FileCleanupPair(HANDLE* handle1,HANDLE* handle2)
{
if(*handle1 != INVALID_HANDLE_VALUE)
{
CloseHandle(*handle1);
if(*handle2 == *handle1)
{
*handle2 = INVALID_HANDLE_VALUE;
}
*handle1 = INVALID_HANDLE_VALUE;
}
FileCleanup(handle2);
}