2015-09-29 3 views
0

Согласно документации, после Local \ or Global \ любой символ в порядке, за исключением обратной косой черты. Я решил назвать мой ММФ по файлу физического файла, как это:Именование файлов с отображением памяти

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: \ Test \ vht1.tst, то она производит строку «Local \ C:/test/vht1.tst "

У меня нет проблем с этим на моем компьютере, но это программное обеспечение будет входить в общую среду размещения, и я не мог найти много информации об условном обозначении MMF. Это хорошая идея?

+2

Вам не разрешено изменять содержимое строки, возвращаемой '.c_str()'. – Barmar

+0

ну, это работает .. но я предполагаю, что это не гарантировано, что бы вы предложили для замены персонажа? – user81993

+2

Используйте 'FilePath [i]' вместо 'pP [i]'. – Barmar

ответ

0

Есть две причины, чтобы назвать ваше отображение MMF (Memory Mapped File):

  • Интерфейс между читателями & писателей ММФ
  • идентификатор, чтобы помочь вам отладки

UNLESS у вас очень большой проект, вы вряд ли столкнетесь с локальным именем. Вы буквально можете называть его чем угодно.

В том числе буква диска и путь, вероятно, не самый лучший выбор. Оставьте это простым:

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

В соответствии с документами [1] вы не должны использовать префикс «Сессия». Он зарезервирован для использования в системе. И для префикса «Глобальный» требуется SeCreateGlobalPrivilege.

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

Смежные вопросы