2011-01-27 3 views
2

Comment puis-je encoder un chemin de fichier dans un nom de fichier afin que le nom de fichier soit valide et qu'il n'y ait pas de collisions? En d'autres termes:Comment encoder un chemin de fichier dans un nom de fichier? (pas de collision, crossplatform)

  • Le nom de fichier résultant ne contient pas de caractères spéciaux tels que '\', ':' ou '/'.
  • Deux chemins de fichier différents ne sont jamais codés dans le même nom de fichier.

Exemple: filepath "C: \ Program Files \ Mon programme" -> nom de fichier "NGQqKY4pBaP7lPKQPD6Y ..."

Cet exemple est uniquement pour illustration; il peut y avoir de meilleures (et plus simples) façons de le faire. Arrière-plan du problème: Ce codage de filepath est utilisé pour une simple vérification d'instance unique en Java: deux instances du programme peuvent être exécutées simultanément si elles sont situées dans des répertoires différents, mais pas lorsqu'elles se trouvent exactement dans le même annuaire. Je sais qu'il existe d'autres moyens de garantir la propriété d'instance unique, mais je trouve que l'encodage du chemin de fichier est le meilleur en termes de rapport coût-bénéfice dans ma situation particulière.

Répondre

2

Utilisez la chaîne du chemin et encode seulement les offres spéciales, comme:

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

caractères Pas plus spéciaux, mais toujours utile et facile à lire. Cependant, puisque vous voulez juste pour assurer l'unicité, une meilleure (mais pas la solution inversible) peut être:

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

Je ne crois pas qu'il y aura un certain dossier% et un/fichier dans votre système de fichiers, cette pourrait fonctionner bien pour vous.

+1

Mais alors C: \ foo \ bar.txt et C: \ foo%) bar.txt auront des noms égaux. – Marii

+0

Ensuite, utilisez ma première conversion. Je voudrais aller à la seconde, parce que personne n'a un fichier foo%) bar.txt dans ses dossiers, et le dossier/fichier nommé foo/bar.txt. – Daniel

+0

Oui, vous avez raison. La première conversion sera suffisante. :) – Marii

Questions connexes