[Test] public void TestRead() { using var f = new AggregateFileStream(Files); var s = "abcdefghijklmnopqrstuvwxyz"; var bytes = Encoding.UTF8.GetBytes(s); var offset = 5; // into 'bytes' int pos = 0; // file pos Assert.Equal((long)pos, f.Position); var read = f.Read(bytes, offset, Content0.Length / 2); Assert.Equal(Content0.Length / 2, read); Assert.Equal((long)(pos + read), f.Position); Assert.Equal(s.Substring(0, offset) + CombinedContent.Substring(pos, read) + s.Substring(offset + read), Encoding.UTF8.GetString(bytes)); s = Encoding.UTF8.GetString(bytes); pos = CombinedContent.Length / 3; f.Seek(pos, SeekOrigin.Begin); Assert.Equal((long)pos, f.Position); offset = 11; read = f.Read(bytes, offset, Content1.Length); Assert.Equal(Content1.Length, read); Assert.Equal((long)(pos + read), f.Position); Assert.Equal(s.Substring(0, offset) + CombinedContent.Substring(pos, read) + s.Substring(offset + read), Encoding.UTF8.GetString(bytes)); }
[Test] public void TestGeneral() { using var f = new AggregateFileStream(Files); Assert.True(f.CanRead); Assert.True(f.CanSeek); Assert.False(f.CanWrite); Assert.Equal((long)CombinedContent.Length, f.Length); }
[Test] public void TestStream() { using (var f = new AggregateFileStream(Files)) using (var s = new FileStream(fileN, FileMode.Create, FileAccess.Write, FileShare.Read)) f.CopyTo(s); var combined = File.ReadAllText(fileN); Assert.Equal(CombinedContent, combined); }
[Test] public void TestFileIndex() { using var f = new AggregateFileStream(Files); Assert.Equal(0, f.FileIndexAtOffset(0)); Assert.Equal(0, f.FileIndexAtOffset(Content0.Length - 1)); Assert.Equal(1, f.FileIndexAtOffset(Content0.Length)); Assert.Equal(1, f.FileIndexAtOffset(Content0.Length + Content1.Length - 1)); Assert.Equal(2, f.FileIndexAtOffset(Content0.Length + Content1.Length)); Assert.Equal(2, f.FileIndexAtOffset(Content0.Length + Content1.Length + Content2.Length - 1)); }
[Test] public void TestPosition() { using var f = new AggregateFileStream(Files); var bytes = Encoding.UTF8.GetBytes(CombinedContent); var rnd = new Random(0); for (int i = 0; i != bytes.Length; ++i) { var pos = rnd.Next(bytes.Length); f.Position = pos; Assert.Equal((int)bytes[pos], f.ReadByte()); } }
[Test] public void TestReadByte() { var bytes = new List <byte>(); using (var f = new AggregateFileStream(Files)) { for (;;) { var b = f.ReadByte(); if (b == -1) { break; } bytes.Add((byte)b); } } Assert.Equal(CombinedContent, Encoding.UTF8.GetString(bytes.ToArray())); }
/// <summary>Open the associated files making 'Stream' valid</summary> public IFileSource Open() { Stream = new AggregateFileStream(m_filepaths, FileShare.ReadWrite | FileShare.Delete, file_options: FileOptions.RandomAccess); return(this); }