Bonjour à tous,
Quelqu'un connaît-il la liste de tous les caractères que Windows refuse dans un nom de fichier (du style de / et \)
Merci
Bonjour à tous,
Quelqu'un connaît-il la liste de tous les caractères que Windows refuse dans un nom de fichier (du style de / et \)
Merci
Bonjour,
\ / : * ? " < > |
je suis pas certain qu'ils soient tous là !
Salut
Les caractères interdits sont: / \ : * ? " < > |
Heu quel est le rapport avec Delphi ?
si tu as XP, tu peux aussi les retrouver en renommant un fichier avec un caractere interdit, il va te resortir la liste complete en infobulle
Bonjour,
Et y a t-il une façon plus simple de formater une chaine pour en faire un nom de fichier valide sans faire autant de stringReplace que de caractères interdits ?
David.
C'est con mais il ne pas oublier le fichier con, quellle que soit son extension.
Bonjour Yurck,
J'ai rien compris... Ou alors, c'est moi qui n'a pas été compris...
En fait, je voudrais une fonction qui me transforme cette chaine:
"toto/est:dans*le<metro>?"
en:
"toto-est-dans-le-metro--".
C'est possible avec une palanquée de StringReplace, mais je demande s'il y a moins lourd.
Ha oui dit donc... J'avais jamais entendu parler de ça.
C'est un bug ou y a une raison ?
Sinon, voici ma fonction toute con, si ça peut faire gagner quelques secondes à quelqu'un:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function traiteNomFic(nomFic: String): String; begin nomFic := StringReplace(nomFic, '/', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '\', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, ':', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '*', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '?', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '"', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '<', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '>', '-', [rfReplaceAll]); Result := StringReplace(nomFic, '|', '-', [rfReplaceAll]); end;
Allez, une spéciale dédicace:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function traiteNomFic(nomFic: String): String; begin nomFic := StringReplace(nomFic, '/', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '\', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, ':', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '*', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '?', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '"', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '<', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '>', '-', [rfReplaceAll]); nomFic := StringReplace(nomFic, '|', '-', [rfReplaceAll]); if nomFic='con' then begin Result := nomFic+'_'; end else Result := nomFic; end;![]()
je savais pas non plus ce truc avec les fichiers "con"
certainement une petite plaisanterie des développeurs![]()
A mon avis il vaut mieux gérer une exception éventuellement renvoyée pour Windows plutôt que de tester à chaque fois si le nom de fichier est valide.
Au passage, CON (pour console), NUL, AUX, PRN, etc. sont des noms qui désignaient (désignent ?) des périphériques sous MS-DOS. Des noms de fichiers égaux à ces sigles peuvent néanmoins être crées en précédent le chelin de "\\.\", de mémoire.
etc = LPT1, LPT2, LPT3, etc...
Bien sur il faut gérer une exception à la création, le problème c'est à la lecture . Imaginons que notre ami ait codifié un paramétrage quelconque et divers basé sur le code d'un enregistrement tout aussi quelconque.
Un exemple ne nuit pas, n'est-il pas ?
La table article (codeArticle varchar(10), nomArticle varchar(100));
article :
LPT, Le Petit Train
CON, Cabane Ou Niche, ...
Si on considère le complément d'information comme un nom de fichier implicite basé sur le code alors cela nous donne
(parce qu'il s'agit d'un ajout à un progiciel préexistant depuis les années 50 et que l'analyste dans l'euphorie du moment c'est trouvé génial en ne modifiant pas la base de donné pour ajouter le champ cheminComplementInformation varchar(255) ceci permettant un gain évident en terme de temps de développement)
article :
LPT, Le Petit Train, c:\LPT.txt
CON, Cabane Ou Niche, c:\CON.txt
On voit bien (si en regardant) que
- lorsque l'utilisateur va enregistrer un complément on va pouvoir gérer une erreur mais pour mettre quoi ??- lorsqu'il faudra lire ce complément on s'expose à tous ??Bien que veux-je dire ?
Existe-t-il une liste de ces exceptions ??
Cordialement, un matin tout tranquille.
Chez moi on utilise des ID ou des GUID comme clés primaires, cela évite de gérer ce genre de problèmatiques.
Néanmoins pour répondre à ta question, préfixe tes chemins d'accès de "\\.\" comme je l'ai indiqué pour avoir accès à ces fichiers :
Par contre l'explorateur Windows merdera en essayant de les ouvrir... Mais bon, contrôler la validité d'un code article en fonction des limitations de Windows me semble partir dans une très mauvaise direction de toute façon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 with TStringList.Create do try Add('toto'); SaveToFile('\\.\c:\con.txt'); Clear; LoadFromFile('\\.\c:\con.txt'); Assert(IndexOf('toto') > -1); finally Free; end;
Bonjour,
Peut-être en adaptant :Travail de Cafeine
Cordialement.
+1
Il faut aussi penser au logiciel de backup qui aura sûrment des problèmes aussi.
Bref, en ajoutant systématiquement quelque chose en début de nom...
on évite toujours les petits problèmes du genre con,lpt1,com1,null,etc
Code : Sélectionner tout - Visualiser dans une fenêtre à part Result := '_'+nomFic;
voire cote GetTempFilename
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function traiteNomFic(const nomFic: String): String; var i:integer; begin result :=nomFic; for i:= 1 to Length(result) do if result[i] in ['/','\',':','*','?','"','<','>','|'] then result[i]:='-'; end;
Merci de montrer que réfléchir 10 secondes et écrire trois lignes est plus efficace que trouver LA fonction parmi des milliers d'autres impossibles à mémoriser.
Pour éviter de taper plein de ' et de , j'aurais écrit
Quel flemmard !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 s0:='/''?'; for i:=1 to length(s) do if pos(s[i],s0)>0 then s[i]:='_';
Bonjour,
Dans ce forum, j'avais trouvé cette routine que j'utilise régulièrement et m'est très utile;
si elle peut vous être utile :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 const Char_Accents = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"*-/\° '''; Char_Sans_Accents = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn________'; // ne conserver que les caract. compatibles avec Unix For i := 1 to Length(Char_Accents) do S_tmp := StringReplace(S_tmp,Char_Accents[i],Char_Sans_Accents[i],[rfReplaceAll]); S_FileName := S_tmp;
Salut.
lol !
Je rappelle (encore une fois...) qu'en français, l'accent a pleine valeur orthographique (Académie française) et qu'à ce titre, il est
obligatoire de les conserver ; à contrario, il est interdit de les enlever.
Sinon, comment faire la différence entre un foret et une forêt ?
Par le genre, me direz-vous ?
Mais comment faire la différence entre une tache et une tâche, dans ce cas ?
Ou entre modelé et modèle ?
Et je signale que si un nom de famille comporte un accent et que celui-ci, par la faute d'un programmeur feignasse, est supprimé, le titulaire du nom en question aura de gros problèmes avec ses papiers officiels (état civil, etc.) : Mme MICHE et Mme MICHÉ ne sont pas les mêmes personnes...
Halte à la suppression des accents en français !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager