ryujinx/Ryujinx.Core/VirtualFs.cs

75 lines
1.8 KiB
C#
Raw Normal View History

2018-02-04 23:08:20 +00:00
using System;
using System.IO;
namespace Ryujinx.Core
2018-02-04 23:08:20 +00:00
{
class VirtualFs : IDisposable
{
private const string BasePath = "Fs";
private const string SavesPath = "Saves";
private const string SdCardPath = "SdCard";
2018-02-04 23:08:20 +00:00
public Stream RomFs { get; private set; }
public void LoadRomFs(string FileName)
{
RomFs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
}
public string GetFullPath(string BasePath, string FileName)
2018-02-04 23:08:20 +00:00
{
if (FileName.StartsWith('/'))
{
FileName = FileName.Substring(1);
}
string FullPath = Path.GetFullPath(Path.Combine(BasePath, FileName));
if (!FullPath.StartsWith(GetBasePath()))
{
return null;
}
return FullPath;
}
public string GetSdCardPath() => MakeDirAndGetFullPath(SdCardPath);
public string GetGameSavesPath() => MakeDirAndGetFullPath(SavesPath);
private string MakeDirAndGetFullPath(string Dir)
2018-02-04 23:08:20 +00:00
{
string FullPath = Path.Combine(GetBasePath(), Dir);
2018-02-04 23:08:20 +00:00
if (!Directory.Exists(FullPath))
2018-02-04 23:08:20 +00:00
{
Directory.CreateDirectory(FullPath);
2018-02-04 23:08:20 +00:00
}
return FullPath;
2018-02-04 23:08:20 +00:00
}
public DriveInfo GetDrive()
{
return new DriveInfo(Path.GetPathRoot(GetBasePath()));
}
public string GetBasePath()
2018-02-04 23:08:20 +00:00
{
return Path.Combine(Directory.GetCurrentDirectory(), BasePath);
}
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
2018-02-04 23:08:20 +00:00
{
RomFs?.Dispose();
2018-02-04 23:08:20 +00:00
}
}
}
}