2015-09-29 53 views
0

根據文檔,在Local \或Global \之後,除了反斜槓之外,任何字符都可以。我決定按照這樣的物理文件的文件路徑來命名我的MMF:命名內存映射文件

std::string GetMapName(std::string FilePath) { 
     std::string Ret("Local\\"); 
     char* pP = (char*)FilePath.c_str(); 
     for (int i = 0; i < Path.size(); i++) { 
      if (pP[i] == '\\') pP[i] = '/'; 
     } 
     Ret.append(FilePath); 
     return Ret; 
    } 

因此,如果該文件是在C:\測試\ vht1.tst那麼它產生的字符串「本地\ C:/測試/ vht1.tst「

我在我的電腦上沒有這個問題,但這個軟件將在共享主機環境中結束,我無法真正找到關於命名MMF的公約的很多信息。這是一個好主意嗎?

+2

你不允許修改()''通過.c_str返回的字符串的內容。 – Barmar

+0

以及它的作品..但我猜它不能保證這樣做,你會建議什麼樣的字符替換呢? – user81993

+2

使用'FilePath [i]'而不是'pP [i]'。 – Barmar

回答

0

有兩個原因來命名MMF映射(內存映射文件):

  • 讀者之間的接口的MMF的&作家
  • 的標識符,以幫助您調試

除非你有一個非常大的項目,你不可能有本地名稱衝突。你可以將它命名爲任何你喜歡的東西。

包括驅動器號和路徑可能不是最佳選擇。保持簡單:

std::string GetMapName(std::string filePath) 
{ 
    return "Local\\" + Path::GetFileName(filePath); 
} 

根據文檔[1],您不應該使用「Session \」前綴。它保留供系統使用。而「全局」前綴需要SeCreateGlobalPrivilege。

[1] https://msdn.microsoft.com/en-us/library/aa382954%28v=vs.85%29.aspx