在内存中创建一个"directory"?

Create a "directory" in memory?

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

我知道我可以使用临时文件,但为了安全和性能我宁愿使用内存。

这种东西是存在的,according to this answer, in Java, using the FileSystemProviderclass。我正在寻找一种在 c# 中执行此操作的方法。

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

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

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

  • 使用流并避免任何使用文件名的 API。
  • 构建插入主机OS存储架构的虚拟文件系统;然而,相对于收益所需的努力是非常值得怀疑的。

我最近遇到了类似的情况,虽然我使用了一种对我来说高效且安全的解决方法,但 .NET 中没有开箱即用的解决方案。

使用 Ionic.Zip Nuget 包,您可以在内存中创建具有复杂结构的整个目录作为流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)));
                        }
                }

这里是如何extract a zip file as a stream using Ionic.Zip