You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中创建内存目录结构并存储文件?

在C#中实现内存目录结构与文件存储

针对你需要在内存中创建目录结构、存储文件并支持访问的需求,这里提供几种实用方案:

方案1:自定义轻量内存文件系统(适合简单场景)

如果需求不复杂,可以自己用类模拟目录和文件结构,结合MemoryStream存储文件内容:

实现代码

// 内存文件实体
public class MemoryFile
{
    public string Name { get; set; }
    public MemoryStream Content { get; set; }
}

// 内存目录实体
public class MemoryDirectory
{
    public string Name { get; set; }
    public Dictionary<string, MemoryDirectory> SubDirectories { get; set; } = new();
    public Dictionary<string, MemoryFile> Files { get; set; } = new();
}

// 使用示例
var root = new MemoryDirectory { Name = "Root" };

// 创建子目录
var docsDir = new MemoryDirectory { Name = "Documents" };
root.SubDirectories.Add("Documents", docsDir);

// 创建并写入文件
var demoFile = new MemoryFile
{
    Name = "demo.txt",
    Content = new MemoryStream()
};
using (var writer = new StreamWriter(demoFile.Content, leaveOpen: true))
{
    writer.Write("Hello, In-Memory Storage!");
}
demoFile.Content.Position = 0; // 重置流指针以便后续读取
docsDir.Files.Add("demo.txt", demoFile);

// 读取文件内容
using (var reader = new StreamReader(docsDir.Files["demo.txt"].Content))
{
    Console.WriteLine(reader.ReadToEnd()); // 输出: Hello, In-Memory Storage!
}

这种方式完全自主可控,但需要自行实现删除、重命名等扩展操作,适合单进程内的简单访问场景。

方案2:使用成熟内存文件系统库(推荐,功能完善)

如果需要兼容.NET标准IO API(比如File.ReadAllText、Directory.CreateDirectory),可以用System.IO.Abstractions.TestingHelpers提供的MockFileSystem,它能模拟完整的文件系统行为:

实现代码

先通过NuGet安装System.IO.Abstractions.TestingHelpers包,然后:

using System.IO.Abstractions.TestingHelpers;

// 初始化内存文件系统
var memoryFS = new MockFileSystem();

// 创建多级目录
memoryFS.Directory.CreateDirectory(@"C:\MemFS\Images\Icons");

// 写入文件
memoryFS.File.WriteAllText(@"C:\MemFS\Images\Icons\logo.ico", "Mock icon content");

// 读取文件
var content = memoryFS.File.ReadAllText(@"C:\MemFS\Images\Icons\logo.ico");
Console.WriteLine(content); // 输出: Mock icon content

// 遍历目录文件
foreach (var file in memoryFS.Directory.EnumerateFiles(@"C:\MemFS", "*", SearchOption.AllDirectories))
{
    Console.WriteLine(file);
}

这个方案的优势是复用你已有的IO操作经验,无需重新学习API,功能覆盖大部分常规文件系统操作。

方案3:跨进程访问的内存文件共享

如果需要让其他进程访问内存中的文件,上面两种方案仅支持单进程,这时可以用内存映射文件实现跨进程共享:

进程1(创建并写入文件)

using System.IO.MemoryMappedFiles;

// 创建命名内存映射文件,允许其他进程访问
using (var mmf = MemoryMappedFile.CreateOrOpen("SharedMemFile", 4096))
{
    using (var stream = mmf.CreateViewStream())
    using (var writer = new StreamWriter(stream))
    {
        writer.Write("Cross-process shared content!");
    }
    Console.WriteLine("Press any key to release memory...");
    Console.ReadKey();
}

进程2(读取共享内容)

using System.IO.MemoryMappedFiles;

// 打开已存在的命名内存映射文件
using (var mmf = MemoryMappedFile.OpenExisting("SharedMemFile"))
{
    using (var stream = mmf.CreateViewStream())
    using (var reader = new StreamReader(stream))
    {
        Console.WriteLine(reader.ReadToEnd()); // 输出: Cross-process shared content!
    }
}

如果需要跨进程共享完整目录结构,你需要在内存映射文件中额外存储目录元数据,或者搭建简单的IPC服务来提供目录和文件的访问接口。


内容的提问来源于stack exchange,提问作者amritkv88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:54:32