C# MemoryMappedFile和FileSystemWatcher

C# MemoryMappedFile和FileSystemWatcher,c#,memory-mapped-files,C#,Memory Mapped Files,是否可以将MemoryMappedFile和FileSystemWatcher结合起来?换句话说,如何为FileSystemWatcher的构造函数获取mem映射文件的路径: new FileSystemWatcher(someMemMappedPath); “someMemMappedPath”应该包含什么字符串 作者编辑:我不是从物理文件创建memorymapped文件,而是从对象创建。我有多个应用程序(进程),我想模拟“事件”来相互通信,我不想使用命名管道。似乎无法连接FileSyste

是否可以将MemoryMappedFile和FileSystemWatcher结合起来?换句话说,如何为FileSystemWatcher的构造函数获取mem映射文件的路径:

new FileSystemWatcher(someMemMappedPath);
“someMemMappedPath”应该包含什么字符串

作者编辑:我不是从物理文件创建memorymapped文件,而是从对象创建。我有多个应用程序(进程),我想模拟“事件”来相互通信,我不想使用命名管道。似乎无法连接FileSystemWatcher。我打算采用线程轮询解决方案,如果某个进程更改了该文件,我只在该文件中做一个标记,这样当另一个进程的线程读取该文件时,就可以得到通知。

更新以回答新问题

我不是从物理文件创建memorymapped文件,而是从对象创建。我有多个应用程序(进程),我想模拟“事件”来相互通信,我不想使用命名管道

您应该仍然能够使用Peters answer,因为磁盘上某处有一个文件,但具有自动生成的文件名

但是,如果您希望能够在系统之间发送事件,这是一个脆弱的解决方案。当文件损坏时会发生什么

更好的方法是引入消息队列。如果应用程序在同一台机器上,那么使用MSMQ非常容易。为每个应用程序创建一个队列,并将每个通知发送到每个队列。通过这种方式,您可以保证没有任何侦听器丢失消息


这篇文章包含几个示例

我想
MemoryMappedFile
对象的期望是您自己知道文件名。i、 e.
MemoryMappedFile
对象中没有任何内容可以获取内存映射到的文件名

您必须使用
MemoryMappedFile.SafeMemoryMappedFileHandle
属性和pinvoke来获取用于创建
MemoryMappedFile
对象的原始文件名


GetMappedFileName
的输出将是传递给
FileSystemWatcher

的内容,如果OP已经有一个
MemoryMappedFile
对象并且不知道文件名,这是如何回答他的问题的?@PeterRitchie:他在哪里说他没有创建它?如果他们创建了一个带有文件名的
MemoryMappedFile
,为什么他们会问
FileSystemWatcher
使用什么文件名?我的观点是,如果他们创建了文件,他们可以切换到用于指定文件名的静态方法文件名。然后问题的答案是
someMemMappedPath=@“c:\ExtremelyLargeImage.data”
…请有人解释一下为什么有人投票否决了这个问题?基于什么理由?我不明白。谢谢你的努力,但这对我不起作用。我将向上投票。为了清楚起见,我创建了一个非路径名的文件,例如“mytempdata”,而不是“c:\temp\whatever”…因此我实际上不知道文件的位置,我认为该文件在磁盘上并不存在。