Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nom de fichier "calculé"

6 réponses
Avatar
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

6 réponses

Avatar
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.
--
Paul
Avatar
Vincent Lefevre
Dans l'article <f1rv6m$1pr3$,
paul POULAIN écrit:

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 - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
mirod
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

Avatar
paul POULAIN
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

Avatar
Stephane Chazelas
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

Avatar
Vincent Lefevre
Dans l'article <f1sj3t$2172$,
paul POULAIN écrit:

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 - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)