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) + { + + } + } +}