//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 loyalsoft. All rights reserved. // Homepage: http://www.game7000.com/ // Feedback: http://www.game7000.com/ //------------------------------------------------------------ using System; using System.IO; namespace GameFramework.FileSystem { /// /// 通用文件系统流。 /// public sealed class CommonFileSystemStream : FileSystemStream, IDisposable { private readonly FileStream m_FileStream; /// /// 初始化通用文件系统流的新实例。 /// /// 要加载的文件系统的完整路径。 /// 要加载的文件系统的访问方式。 /// 是否创建新的文件系统流。 public CommonFileSystemStream(string fullPath, FileSystemAccess access, bool createNew) { if (string.IsNullOrEmpty(fullPath)) { throw new GameFrameworkException("Full path is invalid."); } switch (access) { case FileSystemAccess.Read: m_FileStream = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read); break; case FileSystemAccess.Write: m_FileStream = new FileStream(fullPath, createNew ? FileMode.Create : FileMode.Open, FileAccess.Write, FileShare.Read); break; case FileSystemAccess.ReadWrite: m_FileStream = new FileStream(fullPath, createNew ? FileMode.Create : FileMode.Open, FileAccess.ReadWrite, FileShare.Read); break; default: throw new GameFrameworkException("Access is invalid."); } } /// /// 获取或设置文件系统流位置。 /// public override long Position { get { return m_FileStream.Position; } set { m_FileStream.Position = value; } } /// /// 获取文件系统流长度。 /// public override long Length { get { return m_FileStream.Length; } } /// /// 设置文件系统流长度。 /// /// 要设置的文件系统流的长度。 public override void SetLength(long length) { m_FileStream.SetLength(length); } /// /// 定位文件系统流位置。 /// /// 要定位的文件系统流位置的偏移。 /// 要定位的文件系统流位置的方式。 public override void Seek(long offset, SeekOrigin origin) { m_FileStream.Seek(offset, origin); } /// /// 从文件系统流中读取一个字节。 /// /// 读取的字节,若已经到达文件结尾,则返回 -1。 public override int ReadByte() { return m_FileStream.ReadByte(); } /// /// 从文件系统流中读取二进制流。 /// /// 存储读取文件内容的二进制流。 /// 存储读取文件内容的二进制流的起始位置。 /// 存储读取文件内容的二进制流的长度。 /// 实际读取了多少字节。 public override int Read(byte[] buffer, int startIndex, int length) { return m_FileStream.Read(buffer, startIndex, length); } /// /// 向文件系统流中写入一个字节。 /// /// 要写入的字节。 public override void WriteByte(byte value) { m_FileStream.WriteByte(value); } /// /// 向文件系统流中写入二进制流。 /// /// 存储写入文件内容的二进制流。 /// 存储写入文件内容的二进制流的起始位置。 /// 存储写入文件内容的二进制流的长度。 public override void Write(byte[] buffer, int startIndex, int length) { m_FileStream.Write(buffer, startIndex, length); } /// /// 将文件系统流立刻更新到存储介质中。 /// public override void Flush() { m_FileStream.Flush(); } /// /// 关闭文件系统流。 /// public override void Close() { m_FileStream.Close(); } /// /// 销毁文件系统流。 /// public void Dispose() { m_FileStream.Dispose(); } } }