diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/FAT/FATDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/FAT/FATDataFormat.cs index cd9f45e1..e28c77ad 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/FAT/FATDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/FAT/FATDataFormat.cs @@ -217,6 +217,8 @@ namespace UniversalEditor.DataFormats.FileSystem.FAT int numBlocksBeforeRootDir = (mvarBiosParameterBlock.FileAllocationTableCount * mvarBiosParameterBlock.SectorsPerFAT16) + 1; long numBytesBeforeRootDir = (long)mvarBiosParameterBlock.BytesPerSector * numBlocksBeforeRootDir; + int bytesOccupiedByRootDirEntries = (mvarBiosParameterBlock.MaximumRootDirectoryEntryCount * 32); + br.Accessor.Position = numBytesBeforeRootDir; List fileInfos = new List(); @@ -582,7 +584,20 @@ namespace UniversalEditor.DataFormats.FileSystem.FAT fi.Attributes |= FileAttributes.Deleted; } - if (!((fileAttributes & FATFileAttributes.Subdirectory) == FATFileAttributes.Subdirectory)) + if ((fileAttributes & FATFileAttributes.Subdirectory) == FATFileAttributes.Subdirectory) + { + long firstSectorOffset = (long)numBytesBeforeRootDir + bytesOccupiedByRootDirEntries; + int realSectorIndex = fi.Offset - 2; // 2; + long fileOffset = (firstSectorOffset + (realSectorIndex * mvarBiosParameterBlock.BytesPerSector)); + + long pos = br.Accessor.Position; + br.Accessor.Position = fileOffset; + + // 16896 in test.fat + + br.Accessor.Position = pos; + } + else { fileInfos.Add(fi); } @@ -592,13 +607,11 @@ namespace UniversalEditor.DataFormats.FileSystem.FAT #endregion #region File data { - int bytesOccupiedByRootDirEntries = (mvarBiosParameterBlock.MaximumRootDirectoryEntryCount * 32); - for (int i = 0; i < fileInfos.Count; i++) { FATFileInfo fi = fileInfos[i]; long firstSectorOffset = (long)numBytesBeforeRootDir + bytesOccupiedByRootDirEntries; - int realSectorIndex = fi.Offset - 4; // 2; + int realSectorIndex = fi.Offset - 2; // 2; long fileOffset = (firstSectorOffset + (realSectorIndex * mvarBiosParameterBlock.BytesPerSector)); File file = new File();