//------------------------------------------------------------
// 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();
}
}
}