public void LoadDirectories(FileStream isoStream) { byte[] rootDirectoryBytes; NintendoWiiOpticalDiscDirectoryRecord rootDirectoryRecord; NintendoWiiOpticalDiscDirectoryStructure rootDirectory; // Get name table offset rootDirectoryBytes = DiscReader.GetBytes(isoStream, this.VolumeBaseOffset, this.DataOffset, this.RootDirectoryOffset, 0xC, this.PartitionKey); rootDirectoryRecord = new NintendoWiiOpticalDiscDirectoryRecord(rootDirectoryBytes); this.NameTableOffset = this.RootDirectoryOffset + ((long)rootDirectoryRecord.FileSize * 0xC); rootDirectory = new NintendoWiiOpticalDiscDirectoryStructure(isoStream, isoStream.Name, rootDirectoryRecord, this.ImageCreationTime, this.VolumeBaseOffset, this.DataOffset, this.RootDirectoryOffset, this.RootDirectoryOffset, this.NameTableOffset, String.Empty, String.Empty, this.DiscReader, this.PartitionKey); this.DirectoryStructureArray.Add(rootDirectory); }
public void Initialize(FileStream isoStream, long offset, bool isRawDump) { byte[] volumeIdentifierBytes; byte[] imageDateBytes; string imageDateString; this.IsRawDump = isRawDump; this.DirectoryStructureArray = new ArrayList(); this.FormatDescription = NintendoWiiOpticalDisc.FORMAT_DESCRIPTION_STRING; this.VolumeType = VolumeDataType.Data; // get identifier volumeIdentifierBytes = DiscReader.GetBytes(isoStream, this.VolumeBaseOffset, this.DataOffset, 0x20, 64, this.PartitionKey); volumeIdentifierBytes = FileUtil.ReplaceNullByteWithSpace(volumeIdentifierBytes); this.VolumeIdentifier = ByteConversion.GetEncodedText(volumeIdentifierBytes, ByteConversion.GetPredictedCodePageForTags(volumeIdentifierBytes)).Trim();; // get date imageDateBytes = DiscReader.GetBytes(isoStream, this.VolumeBaseOffset, this.DataOffset, 0x2440, 0xA, this.PartitionKey); imageDateString = ByteConversion.GetAsciiText(imageDateBytes); try { this.ImageCreationTime = new DateTime(int.Parse(imageDateString.Substring(0, 4)), int.Parse(imageDateString.Substring(5, 2)), int.Parse(imageDateString.Substring(8, 2))); } catch (Exception) { this.ImageCreationTime = new DateTime(); } // get offset of file table this.RootDirectoryOffset = (long)ByteConversion.GetUInt32BigEndian(DiscReader.GetBytes(isoStream, this.VolumeBaseOffset, this.DataOffset, 0x424, 4, this.PartitionKey)); this.RootDirectoryOffset <<= 2; this.LoadDirectories(isoStream); }