diff --git a/OpenMcdf.Tests/StreamTests.cs b/OpenMcdf.Tests/StreamTests.cs
index 0401e7c9..bddee3d4 100644
--- a/OpenMcdf.Tests/StreamTests.cs
+++ b/OpenMcdf.Tests/StreamTests.cs
@@ -326,6 +326,21 @@ public void WriteMultiple(Version version, int length)
}
}
+ [TestMethod]
+ [DataRow(Version.V3, 32)]
+ [DataRow(Version.V4, 256)]
+ public void CreateMultipleStreams(Version version, int streamCount)
+ {
+ using var rootStorage = RootStorage.CreateInMemory(version);
+ for (int i = 0; i < streamCount; i++)
+ {
+ Assert.AreEqual(i, rootStorage.EnumerateEntries().Count());
+
+ string streamName = $"TestStream{i}";
+ using Stream stream = rootStorage.CreateStream(streamName);
+ }
+ }
+
[TestMethod]
[DataRow(Version.V3, 0)]
[DataRow(Version.V3, 63)]
diff --git a/OpenMcdf/Fat.cs b/OpenMcdf/Fat.cs
index 411c9c3f..8614159a 100644
--- a/OpenMcdf/Fat.cs
+++ b/OpenMcdf/Fat.cs
@@ -123,8 +123,6 @@ public uint Add(FatEnumerator fatEnumerator, uint startIndex)
&& fatEnumerator.MoveNextFreeEntry();
if (!movedToFreeEntry)
{
- Flush();
-
uint newSectorId = fatSectorEnumerator.Add();
// Next id must be free
@@ -133,8 +131,6 @@ public uint Add(FatEnumerator fatEnumerator, uint startIndex)
ok = fatEnumerator.MoveNextFreeEntry();
Debug.Assert(ok);
-
- CacheCurrentSector();
}
FatEntry entry = fatEnumerator.Current;
diff --git a/OpenMcdf/FatChainEnumerator.cs b/OpenMcdf/FatChainEnumerator.cs
index 2ca194d3..263d1160 100644
--- a/OpenMcdf/FatChainEnumerator.cs
+++ b/OpenMcdf/FatChainEnumerator.cs
@@ -131,10 +131,7 @@ public long GetLength()
/// Extends the chain by one
///
/// The ID of the new sector
- public uint Extend()
- {
- return ExtendFrom(0);
- }
+ public uint Extend() => ExtendFrom(0);
///
/// Returns the ID of the first sector in the chain.
@@ -177,13 +174,15 @@ public uint ExtendFrom(uint hintId)
return startId;
}
+ Reset();
+
uint lastId = startId;
while (MoveNext())
{
lastId = current;
}
- uint id = fat.Add(fatEnumerator, lastId);
+ uint id = fat.Add(fatEnumerator, hintId);
fat[lastId] = id;
return id;
}