IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

caractères interdit dans un nom de fichier


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 382
    Points : 161
    Points
    161
    Par défaut caractères interdit dans un nom de fichier
    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
    75 ans quelques dents en moins, mais toujours envie d'apprendre

  2. #2
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Bonjour,

    \ / : * ? " < > |

    je suis pas certain qu'ils soient tous là !
    [Il était une fois Delphi ....]


  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Les caractères interdits sont: / \ : * ? " < > |

    Heu quel est le rapport avec Delphi ?

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    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

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 063
    Points : 420
    Points
    420
    Par défaut
    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.
    David.

  6. #6
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    C'est con mais il ne pas oublier le fichier con, quellle que soit son extension.
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 063
    Points : 420
    Points
    420
    Par défaut
    Bonjour Yurck,

    Citation Envoyé par Yurck Voir le message
    C'est con mais il ne pas oublier le fichier con, quellle que soit son extension.

    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.
    David.

  8. #8
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par dacid Voir le message


    J'ai rien compris... Ou alors, c'est moi qui n'a pas été compris...

    Moi j'ai bien compris ce que tu voulais, mais je t'informe aussi qu'il penser au fichier "con".

    Essaie de créer un fichier qui porte le nom "con" quelle que soit son extension.
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 063
    Points : 420
    Points
    420
    Par défaut
    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;
    David.

  10. #10
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 063
    Points : 420
    Points
    420
    Par défaut
    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;
    David.

  11. #11
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    je savais pas non plus ce truc avec les fichiers "con"
    certainement une petite plaisanterie des développeurs
    [Il était une fois Delphi ....]


  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    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.
    "It's more fun to compute !"

  13. #13
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par Reisubar Voir le message
    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.
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    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 :

    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;
    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.
    "It's more fun to compute !"

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonjour,
    Citation Envoyé par dacid Voir le message
    C'est possible avec une palanquée de StringReplace, mais je demande s'il y a moins lourd.
    Peut-être en adaptant :Travail de Cafeine

    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par Reisubar Voir le message
    Chez moi on utilise des ID ou des GUID comme clés primaires, cela évite de gérer ce genre de problèmatiques.
    +1

    Citation Envoyé par Reisubar Voir le message
    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.
    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
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  17. #17
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    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;

  18. #18
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Citation Envoyé par Montor Voir le message
    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
    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]:='_';
    Quel flemmard !
    Ce qui s'énonce clairement se conçoit bien ( Le hautbois)

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut Pourquoi pas utiliser StringReplace
    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;

  20. #20
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 720
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 720
    Points : 15 106
    Points
    15 106
    Par défaut Coup de gueule hors sujet (quoique...)
    Salut.
    Citation Envoyé par Philippe_Perfect Voir le message
    (...) j'avais trouvé cette routine que j'utilise régulièrement et m'est très utile;
    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 !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Caractères spéciaux dans un nom de fichier
    Par aminzz92 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/01/2014, 09h40
  2. [File & Zip] Caractères spéciaux dans les noms de fichiers
    Par Marvelll dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/02/2010, 17h50
  3. Caractère spéciaux dans un nom de fichier
    Par eddie5150 dans le forum Java ME
    Réponses: 6
    Dernier message: 26/06/2008, 14h52
  4. Limite des 218 caractères dans un nom de fichier
    Par Didier Gonard dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2008, 14h28
  5. Changer des caractères dans les noms de fichiers
    Par ForgetTheNorm dans le forum Linux
    Réponses: 2
    Dernier message: 07/01/2008, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo