首页 > 解决方案 > 使用 MemoryManagedViewAccessor 将 json 序列化字符串写入文件

问题描述

我是 MemoryMappedFiles 的新手。我正在使用 MemoryMappedFile 创建一个文件,我想向它写入一个 json 字符串。但问题在于 MemoryMappedViewAccessor 的 Write 方法,没有一个重载接受字符串。请帮忙。

public class ApplicationSettingsViewModel 
{
    ApplicationSettingsModel model;
    MemoryMappedFile mmf = null;
    //This is not a singleton class but I guess it has to be one but its ok for demonstration.
    public ApplicationSettingsViewModel() 
    {
        model = new ApplicationSettingsModel();
        CreateFileUsingMemoryMap();
    }

    private void CreateFileUsingMemoryMap() 
    {
        var info = Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "/" + model.Data.Settings.OrcaUISpecificSettings.TimeOutFolder);
        
        string path = Path.Combine(info.FullName + "/" + model.Data.Settings.OrcaUISpecificSettings.File);
        
        mmf = MemoryMappedFile.CreateFromFile(path, FileMode.CreateNew, "MyMemoryFile", 1024 * 1024, MemoryMappedFileAccess.ReadWrite);
    }

    public MemoryMappedViewAccessor GetAccessor() 
    {
        MemoryMappedViewAccessor mmvAccessor = null;
        if (mmf != null) 
        {
           mmvAccessor = mmf.CreateViewAccessor();
        }
         return mmvAccessor;
    }
}

public partial class MainWindow: Window 
{
    private readonly DispatcherTimer _activityTimer;
    private Point _inactiveMousePosition = new Point(0, 0);
    private ApplicationSettingsViewModel AppViewModel;
    Mutex mutex = new Mutex(false, "OrcaGeneStudyMutex");
      
    public MainWindow() 
    {
        InitializeComponent();
    }
   
    public void WriteToFile(string status) 
    {
        Root root = new Root();
        root.AllApplications.Add(new DataToWrite() 
        {
           AppName = "DevOrca", Status = status
        });
        
        var jsonString = JsonConvert.SerializeObject(root);
        var Accessor = AppViewModel.GetAccessor();
        
        mutex.WaitOne();
        //Serialize Contents

        Accessor.Write(1024, jsonString); //it gives a complilation error when i try to pass the json string,
    }
}

标签: c#filememory-mapped-files

解决方案


推荐阅读