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

C++Builder Discussion :

Comment convertir un nom de fichier Windows 98/2000/XP en nom MSDOS (8 caractères) ?


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Par défaut Comment convertir un nom de fichier Windows 98/2000/XP en nom MSDOS (8 caractères) ?
    Bonjour,

    Je cherche une commande permettant de convertir facilement un nom de fichier Windows en nom de fichier au format MSDOS, sur 8 caractères. Par exemple, si on a 2 répertoires "C:\Program Files\TestNumero1" et "C:\Program Files\TestNumero2", on obtiendra :

    C:\Program Files\TestNumero1 deviendra C:\Progra~1\TestNu~1
    C:\Program Files\TestNumero2 deviendra C:\Progra~1\TestNu~2

    Je ne peux donc pas simplement utiliser une fonction réduisant les chaines à 8 caractères terminés par ~1 pour chaque groupe séparé par un \ car, comme dans mon exemple, si plusieurs répertoires commencent de façon identique, le nom des fichiers MSDOS correspondant passera à ~1, ~2, ~3, etc.

    Merci par avance !

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    après une petite recherche dans la FAQ, j'ai trouvé ca qui correspond exactement à ce que tu cherches.

  3. #3
    Membre éclairé Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Par défaut
    Merci... Après une recherche dans l'aide de C++ Builder, j'avais trouvé une autre solution : ExtractShortPathName(nom_fichier);

    Le problème de ces 2 solutions, c'est qu'elles ne renvoient rien si le fichier n'existe pas Du coup, j'ai feinté en créant une fonction qui lance ExtractShortPathName après avoir créé un fichier temporaire si celui-ci n'existe pas... C'est pas très propre, mais faute de mieux...

    Je mets le tag résolu, mais si des personnes trouvent comment obtenir le nom d'un fichier au format 8.3 si ce dernier n'existe pas, je suis bien sûr preneur...

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Tu as la fonction FileExists qui te permet de tester proprement si le fichier existe ou pas. Cela évite de créer un fichier temporaire.

  5. #5
    Membre éclairé Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Par défaut
    Oui, je connais et j'utilise en effet cette fonction pour vérifier si un fichier existe ou non avant de créer un fichier temporaire, mais le fait de créer un fichier temporaire n'est pas très propre...

    Je préférerais connaître directement le nom du fichier au format 8.3 sans avoir à créer ce fichier temporaire, nécessaire à ExtractShortPathName pour qu'il me fournisse un chaine non vide...

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Tu veux quoi exactement lorsque le fichier n'existe pas?

  7. #7
    Membre éclairé Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Par défaut
    Par exemple, je lance une application externe qui n'accepte pas les noms longs de fichiers. Je souhaite connaître le nom du fichier de sortie de cette application externe. Et avant que l'application externe n'ait été lancée, le fichier de sortie n'existe pas... D'où mon problème : comment connaître le nom du fichier de sortie au format 8.3 avant que celui-ci ne soit créé, afin de renseigner les fichiers de paramétrages de l'application externe (qui lui indiquent le nom du fichier de sortie qu'elle doit créer)...

    C'est pas simple à comprendre comme ça, mais en gros je souhaite simplement connaître comment Windows convertit n'importe quel nom de fichier au format MS-DOS (8.3), que ce fichier existe ou non, afin de récupérer ce nom de fichier court dans une chaîne... ExtractShortPathName marche très bien, mais seulement lorsque le fichier dont on veut connaître le nom court existe.

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AnsiString __fastcall ExtractShortPathName(const AnsiString FileName);
    fonctionne avec un ansitring, donc si tu a le nom du fichier de sortie en long, tu a juste à l'utiliser avec la fonction ExtractShortPathName, et tu n'as pas besoin de créer le fichier

    (j'éspére avoir compris ton problème )

  9. #9
    Membre éclairé Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Par défaut
    Malheureusement, tu n'as pas compris mon problème : si tu exécutes ExtractShortPathName(nom_fichier_win32); et que le fichier nommé nom_fichier_win32 n'existe pas, alors la fonction ExtractShortPathName retourne ""...

  10. #10
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Tu peux lancer ton application en lui passant en paramètre un pointeur d'AnsiString vers la chaîne à remplir qui contiendra ton fichier de sortie. Elle le remplira dès qu'elle le connaîtra. s'il est impossible de deviner son chemin à l'avance.

    Comme ca, ton application principale attends que le chemin soit rempli en attendant que l'application secondaire lui donne le fichier de sortie.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/09/2014, 11h10
  2. [XL-2010] Extraire des caractères à un nom de fichier et prendre en compte le nom de fichier
    Par Malcomiix dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/03/2013, 16h51
  3. [XL-2003] Comment utiliser Windows(filename).activate? avec un nom de fichier variable
    Par jeo13 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/05/2011, 16h32
  4. Réponses: 7
    Dernier message: 06/08/2007, 14h34
  5. [PDF] comment convertir un PDF en fichier images
    Par magnus2005 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 23/05/2006, 19h04

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