2011-01-27 1 views
2

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

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

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

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

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

ответ

2

Используйте строку пути и закодировать только блюда, как:

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

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

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

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

+1

Но тогда C: \ foo \ bar.txt и C: \ foo%). Bar.txt будет иметь одинаковые имена. – Marii

+0

Затем используйте мое первое преобразование. Я бы пошел со вторым, потому что NO ONE имеет файл foo%) bar.txt в своих папках AND и папку/файл с именем foo/bar.txt. – Daniel

+0

Да, ты прав. Первое преобразование будет достаточным. :) – Marii

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

  • Нет связанных вопросов^_^