private uint WriteDirectoryContents(BinaryWriter writer, string path, uint sector, out uint requiredSectors) { var tableEntries = RootDir.GetChildren(path) .OrderBy(e => e.IsDirectory) .Select(e => ModelFactory.GetModel <XisoTableData>(e.TableData.ReadAllBytes())) .ToArray(); var requiredSize = tableEntries.Sum(t => t.BinarySize); requiredSectors = RequiredSectors(requiredSize); var dataSector = sector + requiredSectors; var offset = 0; for (var i = 0; i < tableEntries.Length; i++) { var t = tableEntries[i]; t.Left = 0; t.Right = i != tableEntries.Length - 1 ? (ushort)((offset + t.BinarySize) / 4) : (ushort)0; if (t.IsDirectory) { t.Sector = dataSector; uint innerTableSectors; dataSector = WriteDirectoryContents(writer, path + t.Name + Slash, dataSector, out innerTableSectors); } else { var data = Read(t.Sector, (int)t.Size); t.Sector = dataSector; WriteToSector(writer, dataSector, 0, data); dataSector += RequiredSectors((int)t.Size); } WriteToSector(writer, sector, offset, t.ReadAllBytes()); offset += t.BinarySize; } WriteToSector(writer, sector, offset, EmptySector, VolumeDescriptor.SectorSize * (int)requiredSectors - offset); return(dataSector); }
public IEnumerable <XisoFileEntry> GetDirContents(string path) { return(RootDir.GetChildren(path)); }