C# 创建一个";目录";在记忆中?

C# 创建一个";目录";在记忆中?,c#,.net,temporary-files,C#,.net,Temporary Files,我在c#中工作,正在寻找一种方法来创建一个目录的路径,该目录将映射到IO.Stream而不是实际的文件系统。 我希望能够将文件“保存”到该路径,操作内容或文件名,然后将它们从该路径保存到文件系统中的常规文件 我知道我可以使用临时文件,但我宁愿使用内存来保证安全性和性能 这种东西存在于Java中,使用类。我正在寻找一种用c#做这件事的方法 我尝试了所有我能想到的搜索,只找到了java答案和使用临时文件的建议。 甚至可以使用.net吗 基本上,我正在寻找一种方法,可以将文件直接保存到内存中,就像它们

我在c#中工作,正在寻找一种方法来创建一个目录的路径,该目录将映射到IO.Stream而不是实际的文件系统。
我希望能够将文件“保存”到该路径,操作内容或文件名,然后将它们从该路径保存到文件系统中的常规文件

我知道我可以使用临时文件,但我宁愿使用内存来保证安全性和性能

这种东西存在于
Java
中,使用类。我正在寻找一种用c#做这件事的方法

我尝试了所有我能想到的搜索,只找到了java答案和使用临时文件的建议。
甚至可以使用.net吗

基本上,我正在寻找一种方法,可以将文件直接保存到内存中,就像它们保存到文件系统中一样。
因此,例如,如果我有一个第三方类公开一个save方法(
save(string fullPath)
),或者类似于
SmtpServer.Send(MyMsg)
,我可以选择该路径并将其保存到内存流中,而不是保存到驱动器上。(这里最主要的是我想提供一个直接指向
内存流的
路径
)。

.NET在主机操作系统的文件系统上没有抽象层。因此,除非您可以构建自己的自定义代码,并且需要涵盖第三方库,否则只有两个可行的选项:

  • 使用流并避免任何使用文件名的API
  • 构建一个插入主机操作系统存储体系结构的虚拟文件系统;然而,所需的努力与效益是非常值得怀疑的

我最近遇到了类似的情况,尽管我使用了一种对我来说既高效又安全的解决方法,但在.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)));
                        }
                }
使用(var zip=new-Ionic.zip.ZipFile())
{
AddEntry($“file1.json”,新的MemoryStream(Encoding.UTF8.GetBytes(someJsonContent));
对于(int i=0;i<4;i++)
{
AddEntry($“{myDir}/{i}.json”,新的MemoryStream(Encoding.UTF8.GetBytes(anotherJsonContent));
}
}

下面是如何将文件名映射到内存流的

Dictionary
mapping file names to memory streams?我可能应该说得更清楚,但我希望这样做的原因之一是,我可以从外部源(如sql备份或框架类)将文件保存到内存中。我不知道如何使用字典才能做到这一点。框架类通常与
Stream
对象一起工作,所以您对此很在行。至于外部来源,您从中读取数据的方式是什么?如果你给出一个具体的例子,可能会有所帮助。实际上,我已经考虑过这是解决两个stackoverflow问题的可能方法:另一个是关于如何确保sql备份是由同一个软件创建的(我现在找不到)。这类东西在这两种情况下都可能有用。如果你仍然不喜欢使用
字典
,那么你可以相对容易地为使用
MemoryStream
作为文件内容存储的虚拟文件夹和文件发明自己的结构。那么,答案是不能这样做,是吗?如果你不介意的话,我会等一会儿,看看是否有人能想出一个解决方案,然后再接受你的答案。不,这肯定可以做到,但这是一项巨大的工作,需要熟悉文件系统和windows驱动程序系统的工作原理。好的。在这种情况下,似乎我已经尝试了字节比我可以吞咽。感谢每一位写下这个问题的人。