nom de fichier "calculé"

Le
paul POULAIN
Bonjour,

J'ai une chaîne "aléatoire" (pouvant contenir n'importe quelle suite de
caractères, y compris des espaces, des accents, des caractères unicode, des
caractères réservés comme * et ?)
J'ai besoin de sauvegarder le résultat d'un traitement sur un fichier dont
le nom sera "calculé" à partir de la chaîne aléatoire.
Il me faut une bijection entre le nom du fichier et la chaîne, parce que je
dois pouvoir retrouver l'un à partir de l'autre.
Qu'utiliser pour résoudre mon problème ? qqc du genre md5sum pourrait-il
faire l'affaire ? autre chose ?

Dans l'idéal, ca n'utiliserait que des modules fournis en standard avec Perl
(pas trop de trucs cpan à ajouter)
--
Paul
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
paul POULAIN
Le #143109
mon problème est bijectif (ie : 1 chaîne origine = 1 nom de fichier. 1 nom
de fichier=1 chaîne origine).
Mais je n'ai PAS besoin de retrouver la chaîne d'origine à partir du nom du
fichier. Uniquement le nom du fichier à partir de la chaîne d'origine.
--
Paul
Vincent Lefevre
Le #143108
Dans l'article paul POULAIN
mon problème est bijectif (ie : 1 chaîne origine = 1 nom de fichier. 1 nom
de fichier=1 chaîne origine).
Mais je n'ai PAS besoin de retrouver la chaîne d'origine à partir du nom du
fichier. Uniquement le nom du fichier à partir de la chaîne d'origine.


Dans ce cas, le MD5 fait l'affaire (module Digest::MD5). Une collision
est peu probable (mais attention, on sait en fabriquer, au cas où la
chaîne viendrait de l'extérieur).

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

mirod
Le #143106
paul POULAIN wrote:
Bonjour,

J'ai une chaîne "aléatoire" (pouvant contenir n'importe quelle suite de
caractères, y compris des espaces, des accents, des caractères unicode, des
caractères réservés comme * et ?)
J'ai besoin de sauvegarder le résultat d'un traitement sur un fichier dont
le nom sera "calculé" à partir de la chaîne aléatoire.
Il me faut une bijection entre le nom du fichier et la chaîne, parce que je
dois pouvoir retrouver l'un à partir de l'autre.
Qu'utiliser pour résoudre mon problème ? qqc du genre md5sum pourrait-il
faire l'affaire ? autre chose ?

Dans l'idéal, ca n'utiliserait que des modules fournis en standard avec Perl
(pas trop de trucs cpan à ajouter)


Euh, juste une question: est-ce que tu es vraiment sûr de devoir changer
le nom du fichier? Parce que si c'est pour s'en reservir avec Perl, ça
ne devrait pas poser de problème.

--
mirod

paul POULAIN
Le #145501
mirod wrote:
Euh, juste une question: est-ce que tu es vraiment sûr de devoir changer
le nom du fichier? Parce que si c'est pour s'en reservir avec Perl, ça
ne devrait pas poser de problème.

Non, du tout. Mais je veux un truc multi-plateforme, et comme la chaîne

d'origine peut contenir des tas de trucs exotiques, je m'en voudrais
d'avoir des problèmes dans certains cas.
Déjà, je viens de voir/découvrir qu'avec md5_base64, on peut avoir des /, ce
qui pose problème à la création du fichier, puisque du coup, il essaye
d'ouvrir un sous répertoire qui n'existe pas. Il peut aussi y avoir des +,
qui pourraient poser problème dans certains cas j'imagine.

Bref, si qqn a une transformation qui aboutisse à des lettres ou des
chiffres, sans autre truc exotique, je suis preneur.
--
Paul

Stephane Chazelas
Le #145500
2007-05-09, 09:57(+02), paul POULAIN:
Bonjour,

J'ai une chaîne "aléatoire" (pouvant contenir n'importe quelle suite de
caractères, y compris des espaces, des accents, des caractères unicode, des
caractères réservés comme * et ?)
J'ai besoin de sauvegarder le résultat d'un traitement sur un fichier dont
le nom sera "calculé" à partir de la chaîne aléatoire.
Il me faut une bijection entre le nom du fichier et la chaîne, parce que je
dois pouvoir retrouver l'un à partir de l'autre.
Qu'utiliser pour résoudre mon problème ? qqc du genre md5sum pourrait-il
faire l'affaire ? autre chose ?

Dans l'idéal, ca n'utiliserait que des modules fournis en standard avec Perl
(pas trop de trucs cpan à ajouter)


Pourquoi pas un simple URL-encoding (é -> %E9 ou %C3%A9 si
utf8).

avec md5, tu ne pourras pas retrouver la chaine a partir de la
sum.

Attention aussi, la plupart des systemes de fichiers ont une
restriction sur la longueur du nom du fichier.

--
Stéphane

Vincent Lefevre
Le #145499
Dans l'article paul POULAIN
Déjà, je viens de voir/découvrir qu'avec md5_base64, on peut avoir
des /, ce qui pose problème à la création du fichier, puisque du
coup, il essaye d'ouvrir un sous répertoire qui n'existe pas. Il
peut aussi y avoir des +, qui pourraient poser problème dans
certains cas j'imagine.


MD5 avec sortie en hexa, il n'y a pas ce genre de problème.
Cf le module que j'ai indiqué.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Publicité
Poster une réponse
Anonyme