0

开发一个将使用内存映射文件进行一些应用程序间(或者是内部?)应用程序通信的应用程序,我想确保当我随机生成一个内存映射内存文件时,我不会意外生成或者得到一个已经存在的副本(当行星对齐时这种超罕见的情况可能会发生)。关于如何防止这种情况的任何想法?System.IO.MemoryMappedFiles 似乎没有 File.Exists() 方法...我想我可以尝试 OpenOrCreate() 并处理任何访问冲突等,但这会很快变得令人讨厌。

4

3 回答 3

2

Using File.Exists() wouldn't be concurrency-safe anyway.

The best thing to do: base a Filename on a Guid.

于 2013-08-26T14:53:19.860 回答
1

来自:使用 .NET Framework 编程内存映射文件 - CodeProject.com

static void Main(string[] args)
{
    string name = "NetMMFSingle";

    // Create named MMF
    try
    {
        var mmf = MemoryMappedFile.CreateNew(name, 1);
    } catch
    {
        Console.WriteLine("Instance already running...");
        return;
    }

    ConsoleKeyInfo key = Console.ReadKey();

    // Your real code follows...
}
于 2013-08-26T15:13:09.633 回答
0

首先,您可以通过为文件使用唯一名称来防止命名冲突,例如您的公司名称或应用程序名称,或两者兼而有之。没有其他应用程序会在文件名中包含这些内容。如果您担心同一应用程序的两个副本,那么您可以简单地以仅创建模式打开文件,而不是创建或打开。

于 2013-08-26T15:24:04.863 回答