使用内存映射文件进行某些内部(或内部?)应用程序通信的应用程序,我想确保当我随机生成一个内存映射的内存文件时,我不知道t意外地生成或获得已经存在的副本(当行星对齐时可能发生类似的超罕见情况)。有关如何预防的任何想法? System.IO.MemoryMappedFiles似乎没有File.Exists()方法...我想我可以尝试OpenOrCreate()并处理任何访问冲突等,但这会很快变得讨厌。
答案 0 :(得分:2)
无论如何,使用File.Exists()
都不会是并发安全的。
最好的办法:在Guid上建立一个文件名。
答案 1 :(得分:1)
From: Programming Memory-Mapped Files with the .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...
}
答案 2 :(得分:0)
首先,您可以使用文件的唯一名称(例如公司名称或应用程序名称或两者)来防止命名冲突。没有其他应用程序会在文件名中包含那些应用程序。如果您担心同一个应用程序的两个副本,那么您只需在“仅创建”模式下打开该文件,而不是“创建”或“打开”。