pschelpdesk/Vendor/Prise/Core/DefaultFileSystemUtilities.cs
2024-11-04 20:45:34 +01:00

63 lines
2.4 KiB
C#

using System;
using System.IO;
using System.Threading.Tasks;
namespace Prise
{
public class DefaultFileSystemUtilities : IFileSystemUtilities
{
public bool DoesFileExist(string pathToFile)
{
return File.Exists(pathToFile);
}
public async Task<Stream> ReadFileFromDisk(string pathToFile)
{
var probingPath = EnsureFileExists(pathToFile);
var memoryStream = new MemoryStream();
using (var stream = new FileStream(probingPath, FileMode.Open, FileAccess.Read))
{
memoryStream.SetLength(stream.Length);
await stream.ReadAsync(memoryStream.GetBuffer(), 0, (int)stream.Length);
}
return memoryStream;
}
public string EnsureFileExists(string pathToFile)
{
var probingPath = Path.GetFullPath(pathToFile);
if (!File.Exists(probingPath))
throw new FileNotFoundException($"Plugin assembly does not exist in path : {probingPath}");
return probingPath;
}
public Stream ReadDependencyFileFromDisk(string loadPath, string pluginAssemblyName)
{
var probingPath = EnsureDependencyFileExists(loadPath, pluginAssemblyName);
var memoryStream = new MemoryStream();
using (var stream = new FileStream(probingPath, FileMode.Open, FileAccess.Read))
{
memoryStream.SetLength(stream.Length);
stream.Read(memoryStream.GetBuffer(), 0, (int)stream.Length);
}
return memoryStream;
}
public byte[] ToByteArray(Stream stream)
{
stream.Position = 0;
byte[] buffer = new byte[stream.Length];
for (int totalBytesCopied = 0; totalBytesCopied < stream.Length;)
totalBytesCopied += stream.Read(buffer, totalBytesCopied, Convert.ToInt32(stream.Length) - totalBytesCopied);
return buffer;
}
public string EnsureDependencyFileExists(string loadPath, string pluginAssemblyName)
{
var probingPath = Path.GetFullPath(Path.Combine(loadPath, pluginAssemblyName));
if (!File.Exists(probingPath))
throw new FileNotFoundException($"Plugin dependency assembly does not exist in path : {probingPath}");
return probingPath;
}
}
}