Как закодировать путь к файлу в имени файла?(без столкновений, кроссплатформенность) - PullRequest
3 голосов
/ 27 января 2011

Как я могу закодировать путь к файлу в имени файла, чтобы имя файла было действительным и не было коллизий?Другими словами:

  • Полученное имя файла не содержит специальных символов, таких как '\', ':' или '/'.
  • Два разных пути к файлам никогда не кодируются в один и тот жеимя файла.

Пример: путь к файлу "C: \ Program Files \ My Program" -> имя файла "NGQqKY4pBaP7lPKQPD6Y ..."

Этот пример только для иллюстрации;могут быть более эффективные (и более простые) способы сделать это.

Проблема: эта кодировка пути к файлу используется для простой проверки одного экземпляра в Java: два экземпляра программы могут выполняться одновременно, если онирасположены в разных каталогах, но не тогда, когда они находятся в одном и том же каталоге.Я знаю, что есть другие способы обеспечить свойство единственного экземпляра, но я считаю, что кодировка пути к файлу является лучшей с точки зрения соотношения затрат и выгод в моей конкретной ситуации.

1 Ответ

4 голосов
/ 27 января 2011

Используйте строку пути и закодируйте только специальные значения, например:

% -> %%
\ -> %)
/ -> %(
: -> %;

Никаких специальных символов, но все еще полезно и читабельно.Однако, поскольку вы просто хотите обеспечить уникальность, лучшее (но не обратимое решение) может быть:

: -> ;
\ -> %
/ -> %
% -> %

Я не верю, что в вашей файловой системе будет файл%% и файл / file,так что это может сработать хорошо для вас.

...