Skip to content

Commit cbb822c

Browse files
Fixes #57
* FAT load entries update end of entries when cluster doesn't contain end marker entry
1 parent 5e02b5e commit cbb822c

2 files changed

Lines changed: 71 additions & 1 deletion

File tree

Library/DiscUtils.Fat/Directory.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,8 @@ private void LoadEntries()
471471
{
472472
AddEntryRaw(streamPos, entry);
473473
}
474+
475+
_endOfEntries = _dirStream.Position;
474476
}
475477

476478
// Record any pending free entry

Tests/LibraryTests/Fat/FatFileSystemTest.cs

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,4 +608,72 @@ public void CreateDirectoryWithExistingData()
608608

609609
Assert.Empty(entries);
610610
}
611-
}
611+
612+
[Fact]
613+
public void CreateFilesInSubdirectoryUsingFatFileSystemPerFile()
614+
{
615+
using var diskStream = new SparseMemoryStream();
616+
617+
diskStream.Position = 0;
618+
using (var fsFormat = FatFileSystem.FormatFloppy(diskStream, FloppyDiskType.HighDensity, "FLOPPY_IMG "))
619+
{
620+
fsFormat.CreateDirectory("dir");
621+
}
622+
623+
for (var i = 0; i < 20; i++)
624+
{
625+
using (var fsCreate = new FatFileSystem(diskStream))
626+
{
627+
using (var fileStream = fsCreate.OpenFile($"dir{Path.DirectorySeparatorChar}file{i}.txt", FileMode.Create))
628+
{
629+
fileStream.Write(new byte[10]);
630+
}
631+
}
632+
}
633+
634+
using var fsAssert = new FatFileSystem(diskStream);
635+
{
636+
var entries = fsAssert.GetFileSystemEntries("").ToList();
637+
Assert.Single(entries);
638+
Assert.Equal("dir", entries[0]);
639+
640+
entries = fsAssert.GetFileSystemEntries("dir").ToList();
641+
Assert.Equal(20, entries.Count);
642+
Assert.Equal(Enumerable.Range(0, 20).Select(i => $"dir\\file{i}.txt"), entries);
643+
}
644+
}
645+
646+
[Fact]
647+
public void CreateFilesInSubdirectoryUsingOneFatFileSystem()
648+
{
649+
using var diskStream = new SparseMemoryStream();
650+
651+
diskStream.Position = 0;
652+
using (var fsFormat = FatFileSystem.FormatFloppy(diskStream, FloppyDiskType.HighDensity, "FLOPPY_IMG "))
653+
{
654+
fsFormat.CreateDirectory("dir");
655+
}
656+
657+
using (var fsCreate = new FatFileSystem(diskStream))
658+
{
659+
for (var i = 0; i < 20; i++)
660+
{
661+
using (var fileStream = fsCreate.OpenFile($"dir{Path.DirectorySeparatorChar}file{i}.txt", FileMode.Create))
662+
{
663+
fileStream.Write(new byte[10]);
664+
}
665+
}
666+
}
667+
668+
using var fsAssert = new FatFileSystem(diskStream);
669+
{
670+
var entries = fsAssert.GetFileSystemEntries("").ToList();
671+
Assert.Single(entries);
672+
Assert.Equal("dir", entries[0]);
673+
674+
entries = fsAssert.GetFileSystemEntries("dir").ToList();
675+
Assert.Equal(20, entries.Count);
676+
Assert.Equal(Enumerable.Range(0, 20).Select(i => $"dir\\file{i}.txt"), entries);
677+
}
678+
}
679+
}

0 commit comments

Comments
 (0)