Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public IEnumerable <XisoFileEntry> GetDirContents(string path)
 {
     return(RootDir.GetChildren(path));
 }