IndieGame/client/Assets/Plugins/Easy Save 3/Scripts/Streams/ES3FileStream.cs
DOBEST\zhaoyingjie f242607587 初始化工程
2024-10-11 10:12:15 +08:00

68 lines
1.9 KiB
C#

using System.IO;
namespace ES3Internal
{
public enum ES3FileMode {Read, Write, Append}
public class ES3FileStream : FileStream
{
private bool isDisposed = false;
public ES3FileStream( string path, ES3FileMode fileMode, int bufferSize, bool useAsync)
: base( GetPath(path, fileMode), GetFileMode(fileMode), GetFileAccess(fileMode), FileShare.None, bufferSize, useAsync)
{
}
// Gets a temporary path if necessary.
protected static string GetPath(string path, ES3FileMode fileMode)
{
string directoryPath = ES3IO.GetDirectoryPath(path);
// Attempt to create the directory incase it does not exist if we are storing data.
if (fileMode != ES3FileMode.Read && directoryPath != ES3IO.persistentDataPath)
ES3IO.CreateDirectory(directoryPath);
if(fileMode != ES3FileMode.Write || fileMode == ES3FileMode.Append)
return path;
return (fileMode == ES3FileMode.Write) ? path + ES3IO.temporaryFileSuffix : path;
}
protected static FileMode GetFileMode(ES3FileMode fileMode)
{
if (fileMode == ES3FileMode.Read)
return FileMode.Open;
else if (fileMode == ES3FileMode.Write)
return FileMode.Create;
else
return FileMode.Append;
}
protected static FileAccess GetFileAccess(ES3FileMode fileMode)
{
if (fileMode == ES3FileMode.Read)
return FileAccess.Read;
else if (fileMode == ES3FileMode.Write)
return FileAccess.Write;
else
return FileAccess.Write;
}
protected override void Dispose (bool disposing)
{
// Ensure we only perform disposable once.
if(isDisposed)
return;
isDisposed = true;
base.Dispose(disposing);
// If this is a file writer, we need to replace the temp file.
/*if(fileMode == ES3FileMode.Write && fileMode != ES3FileMode.Append)
{
// Delete the old file before overwriting it.
ES3IO.DeleteFile(path);
// Rename temporary file to new file.
ES3IO.MoveFile(path + ES3.temporaryFileSuffix, path);
}*/
}
}
}