//--------------------------------------------------------------------------- bool File::Truncate (int64u Offset) { if (File_Handle==NULL) return false; #ifdef ZENLIB_USEWX return false; //Not supported #else //ZENLIB_USEWX #ifdef ZENLIB_STANDARD #if defined(WINDOWS) return false; //Not supported #else //defined(WINDOWS) //Need to close the file, use truncate, reopen it if (Offset==(int64u)-1) Offset=Position_Get(); Ztring File_Name_Sav=File_Name; Close(); truncate(File_Name_Sav.To_Local().c_str(), Offset); if (!Open(File_Name_Sav, Access_Read_Write)) return false; GoTo(0, FromEnd); return true; #endif //!defined(WINDOWS) #elif defined WINDOWS if(Offset!=(int64u)-1 && Offset!=Position_Get()) if (!GoTo(Offset)) return false; SetEndOfFile(File_Handle); return true; #endif #endif //ZENLIB_USEWX }
//--------------------------------------------------------------------------- size_t File::Read (int8u* Buffer, size_t Buffer_Size_Max) { if (File_Handle==NULL) return 0; #ifdef ZENLIB_USEWX size_t ByteRead=((wxFile*)File_Handle)->Read(Buffer, Buffer_Size_Max); Position+=ByteRead; return ByteRead; #else //ZENLIB_USEWX #ifdef ZENLIB_STANDARD //return read((int)File_Handle, Buffer, Buffer_Size_Max); if (Position==(int64u)-1) Position_Get(); if (Size==(int64u)-1) Size_Get(); if (Position!=(int64u)-1 && Position+Buffer_Size_Max>Size) Buffer_Size_Max=(size_t)(Size-Position); //We don't want to enable eofbit (impossible to seek after) ((fstream*)File_Handle)->read((char*)Buffer, Buffer_Size_Max); size_t ByteRead=((fstream*)File_Handle)->gcount(); Position+=ByteRead; return ByteRead; #elif defined WINDOWS DWORD Buffer_Size; if (ReadFile(File_Handle, Buffer, (DWORD)Buffer_Size_Max, &Buffer_Size, NULL)) { Position+=Buffer_Size; return Buffer_Size; } else return 0; #endif #endif //ZENLIB_USEWX }