C# 内存映射文件->;检查重复的文件名

C# 内存映射文件->;检查重复的文件名,c#,.net,memory-mapped-files,C#,.net,Memory Mapped Files,在一个应用程序上工作,该应用程序将使用内存映射文件进行一些内部(或是内部)应用程序通信,我想确保当我随机生成一个内存映射的仅内存文件时,我不会意外生成或得到一个已经存在的副本(行星对齐时这种情况极为罕见,类似的情况可能会发生). 有没有办法防止这种情况发生?System.IO.MemoryMappedFiles似乎没有File.Exists()方法…我想我可以尝试OpenOrCreate()并处理任何访问冲突等,但这会变得很快 使用File.Exists()无论如何都不是并发安全的 最好的做法是

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

使用
File.Exists()
无论如何都不是并发安全的

最好的做法是:根据Guid创建文件名

使用
File.Exists()
无论如何都不是并发安全的

最好的做法是:根据Guid创建文件名


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

首先,您可以使用文件的唯一名称(如公司名称或应用程序名称,或两者)来防止命名冲突。没有其他应用程序会在文件名中包含这些内容。如果您担心同一应用程序的两个副本,那么您只需在“仅创建”模式下打开该文件,而不是创建或打开。

这是进程间操作。首先创建一个文件——确保它是唯一的。然后你把它映射到内存中。所以我不理解这个问题:内存映射到实际文件是可选的,它是进程间的。首先创建一个文件——确保它是唯一的。然后你把它映射到内存中。所以我不理解这个问题:到实际文件的内存映射是可选的。我希望可以,但GUID太大,无法通过SendMessage()发送以通知其他进程打开。目前正在考虑使用日期时间的一部分来实现唯一性,并交叉手指。@user978122然后使用两个SendMessage(具有不同的消息id)!另一方等待消息的两个“部分”。这增加了程序的复杂性…复杂性很糟糕^_^Guid不适合64位上的两个消息参数吗?我希望可以,但Guid太大,无法通过SendMessage()发送,无法通知另一个进程打开。目前正在考虑使用日期时间的一部分来实现唯一性,并交叉手指。@user978122然后使用两个SendMessage(具有不同的消息id)!另一方等待消息的两个“部分”。这增加了程序的复杂性…复杂性很糟糕^_^Guid不适合64位上的两个消息参数吗?
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...
}