我正在使用c#,并且正在寻找一种方法来创建一个目录的路径,该路径将映射到IO.Stream而不是实际的文件系统。
我希望能够将文件“保存”到该路径,操作内容或文件名,然后将它们从该路径保存到文件系统中的常规文件。
我知道我可以使用临时文件,但我宁愿使用内存来保证安全性和性能。
使用according to this answer类在Java
中存在FileSystemProvider
这类内容。我正在寻找一种在c#中实现它的方法。
我尝试了所有我能想到的搜索,并且只提供了java答案和使用临时文件的建议。
甚至可以使用.net?
基本上,我正在寻找一种方法来启用将文件直接保存到内存,就好像它们保存到文件系统中一样。
所以,例如,如果我有第三方类暴露了保存方法(save(string fullPath)
),或类似SmtpServer.Send(MyMsg)
in this question,我可以选择该路径并将其保存到内存流而不是驱动器。 (这里的主要内容是我想提供一个直接导致path
)的memory stream
。
答案 0 :(得分:8)
.NET在主机操作系统的文件系统上没有抽象层。因此,除非您可以构建自己的自定义代码,并且需要覆盖第三方库,否则只有两个可行的optilns:
答案 1 :(得分:0)
我最近也遇到过类似的情况,尽管我使用了对我有效且安全的解决方法,但.NET中没有开箱即用的解决方案。
使用Ionic.Zip Nuget包,您可以创建一个结构复杂的整个目录作为内存中的流,尽管它将创建为zip文件,但是您可以将其提取为流,甚至可以将zip文件作为流。
using (var zip = new Ionic.Zip.ZipFile())
{
zip.AddEntry($"file1.json", new MemoryStream(Encoding.UTF8.GetBytes(someJsonContent)));
for (int i = 0; i < 4; i++)
{
zip.AddEntry($"{myDir}/{i}.json", new MemoryStream(Encoding.UTF8.GetBytes(anotherJsonContent)));
}
}