public override void Close() // 0x28 { lock (StaticDiscFileData.Lock) { if (IsCustomDiscFile) { if (DiscFile != null) { DiscFile.Close(); DiscFile = null; } IsCustomDiscFile = false; } else if (IsFromLooseFile) { --StaticDiscFileData.RefCount; } if (StaticDiscFileData.RefCount == 0 && StaticDiscFileData.DiscFile != null && !StaticDiscFileData.Status2) { StaticDiscFileData.DiscFile = null; } } }
public override void Read(byte[] destination, int bytesToRead) //0x14 { lock (StaticDiscFileData.Lock) { if (IsCustomDiscFile) { DiscFile.Read(destination, bytesToRead); return; } if (IsFromLooseFile && F24Offset < F32Size) { var fileOffset = DiscFile.GetOffset(); var calcOffset = F24Offset + F16FileOffset; if (fileOffset != calcOffset) { DiscFile.Seek(calcOffset, SeekOrigin.Begin); } long toRead = bytesToRead; if (toRead > F32Size - F24Offset) { toRead = F32Size - F24Offset; } DiscFile.Read(destination, (int)toRead); F24Offset += toRead; } } }
public override void Seek(long destOffset, SeekOrigin type) // 0x1C { lock (StaticDiscFileData.Lock) { if (IsCustomDiscFile) { DiscFile.Seek(destOffset, type); return; } switch (type) { case SeekOrigin.Begin: F24Offset = destOffset; break; case SeekOrigin.Current: F24Offset += destOffset; break; case SeekOrigin.End: F24Offset = F32Size; F24Offset += destOffset; break; } } }
public override bool IsOpen() // 0x0C { lock (StaticDiscFileData.Lock) { if (IsCustomDiscFile) { return(DiscFile.IsOpen()); } return(IsFromLooseFile); } }
// Read2 not overridden public override long GetOffset() // 0x24 { lock (StaticDiscFileData.Lock) { if (IsCustomDiscFile) { return(DiscFile.GetOffset()); } return(F24Offset); } }
public override bool IsEndOfFile() // 0x08 { lock (StaticDiscFileData.Lock) { if (IsCustomDiscFile) { return(DiscFile.IsEndOfFile()); } if (IsFromLooseFile) { return(F24Offset >= F32Size); } return(true); } }
public override long GetFileSize() // 0x04 { lock (StaticDiscFileData.Lock) { if (IsCustomDiscFile) { return(DiscFile.GetFileSize()); } if (IsFromLooseFile) { return(F32Size); } return(0L); } }