2013-08-26 77 views
0

處理將使用內存映射文件進行某些內部(或內部?)應用程序通信的應用程序,並且我想確保何時隨機生成內存映射的內存文件,我不會無意中產生或得到一個已經存在的副本(當行星對齊時會發生這種情況的極罕見情況)。任何想法如何防止呢? System.IO.MemoryMappedFiles似乎沒有File.Exists()方法......我想我可以嘗試OpenOrCreate()並處理任何訪問衝突等,但這會變得很快。內存映射文件 - >檢查重複的文件名

+1

它是進程間。首先你創建一個文件 - 確保它是唯一的。然後你記憶地圖。所以我不明白這個問題:http://msdn.microsoft.com/en-us/library/dd997372.aspx – dcaswell

+0

內存映射到一個實際的文件是可選的。 – user978122

回答

2

無論如何,使用File.Exists()並不是安全併發的。

要做的最好的事情是:在Guid上創建一個文件名。

+0

希望我可以,但是一個GUID太大,無法通過SendMessage()來通知其他進程打開。目前正在考慮將部分日期時間用於唯一性,並穿過我的手指。 – user978122

+0

@ user978122然後使用TWO SendMessage(使用不同的msg id)!另一方等待消息的「部分」。 – xanatos

+0

正在增加程序的複雜性...和複雜性是不好的!^_^ – user978122

0

首先,你可以通過使用一個唯一的名稱爲您的文件,如公司名稱,或者您的應用程序的名稱,或兩者防止命名衝突。沒有其他應用程序將在文件名中包含這些內容。如果您擔心同一應用程序的兩個副本,那麼只需以「僅創建」模式打開文件,而不是創建或打開。