diff --git a/source/Cosmos.System/Cosmos.System.csproj b/source/Cosmos.System/Cosmos.System.csproj
index 6a528030c..89034da64 100644
--- a/source/Cosmos.System/Cosmos.System.csproj
+++ b/source/Cosmos.System/Cosmos.System.csproj
@@ -80,6 +80,7 @@
+
diff --git a/source/Cosmos.System/FileSystem/FAT/BaseFatStream.cs b/source/Cosmos.System/FileSystem/FAT/BaseFatStream.cs
index a00f37072..5ae22682f 100644
--- a/source/Cosmos.System/FileSystem/FAT/BaseFatStream.cs
+++ b/source/Cosmos.System/FileSystem/FAT/BaseFatStream.cs
@@ -27,7 +27,8 @@ namespace Cosmos.System.FileSystem.FAT
mFirstClusterNumber = firstClusterNumber;
mFileSystem = fileSystem;
- if (mFileOrDirectory.Size > 0)
+ mSize = mFileOrDirectory.Size;
+ if (mSize > 0)
{
mFatTable = mFileSystem.GetFatTable(firstClusterNumber);
}
@@ -66,11 +67,12 @@ namespace Cosmos.System.FileSystem.FAT
{
FatHelpers.Debug("No FileOrDirectory!");
}
- return (long) mFileOrDirectory.Size;
+ return (long) mSize;
}
}
protected UInt64 mPosition;
+ private ulong mSize;
public override sealed long Position
{
@@ -112,7 +114,7 @@ namespace Cosmos.System.FileSystem.FAT
// FirstSector can be 0 for 0 length files
return 0;
}
- if (mPosition == mFileOrDirectory.Size)
+ if (mPosition == mSize)
{
// EOF
return 0;
@@ -120,7 +122,7 @@ namespace Cosmos.System.FileSystem.FAT
// reduce count, so that no out of bound exception occurs if not existing
// entry is used in line mFS.ReadCluster(mFatTable[(int)xClusterIdx], xCluster);
- ulong xMaxReadableBytes = mFileOrDirectory.Size - mPosition;
+ ulong xMaxReadableBytes = mSize - mPosition;
ulong xCount = (ulong) aCount;
if (xCount > xMaxReadableBytes)
{
diff --git a/source/Cosmos.System/FileSystem/FAT/FatFileSystem.cs b/source/Cosmos.System/FileSystem/FAT/FatFileSystem.cs
index 037b05dcf..0a63a0065 100644
--- a/source/Cosmos.System/FileSystem/FAT/FatFileSystem.cs
+++ b/source/Cosmos.System/FileSystem/FAT/FatFileSystem.cs
@@ -412,6 +412,7 @@ namespace Cosmos.System.FileSystem.FAT
}
using (var xStream = new FatDirectoryStream((FatDirectory)baseDirectory))
+ //using(var xStream = new TestFatDirectoryStream((FatDirectory)baseDirectory))
{
return GetDirectoryContents((FatDirectory) baseDirectory, xStream);
}
diff --git a/source/Cosmos.System/FileSystem/FAT/TestFatDirectoryStream.cs b/source/Cosmos.System/FileSystem/FAT/TestFatDirectoryStream.cs
new file mode 100644
index 000000000..e53fd8674
--- /dev/null
+++ b/source/Cosmos.System/FileSystem/FAT/TestFatDirectoryStream.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+using Cosmos.System.FileSystem.FAT.Listing;
+
+namespace Cosmos.System.FileSystem.FAT
+{
+ public class TestFatDirectoryStream: BaseFatStream
+ {
+ public TestFatDirectoryStream(FatDirectory directory) : base(directory, directory.FileSystem, directory.FirstClusterNum)
+ {
+
+ }
+ }
+}