begin process at 2012 02 15 03:00:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Système

 > 

Fichier & Disque

 > 

conversion long filename vers short filename


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

conversion long filename vers short filename

jeudi 9 juillet 2009 à 16:44:48 | conversion long filename vers short filename

yyyx

Bonjour,

Bon, je sais que la question a été posée pas mal de fois, je cherche à convertir un nom de fichier long vers un nom de fichier court.
Pas de problème, une source quasi universelle semble fonctionner (cf ci dessous)

Mais, je ne sais pas pourquoi, chez moi, ca marche par exemple pour "C:\program files" mais pas pour un dossier créé du genre : "C:\Mes Documents\Fichier long.txt" ??
D'ailleurs, en mettant "fichier long.txt" dans program files, "program files" est bien converti, mais pas "fichier long.txt"
qqn a une explication ??

Voici le code :

Private Declare Function GetShortPathName Lib "kernel32" Alias _
"GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

' Convert a long filename into the short 8.3 format
' if the file doesn't exist, return a null string

Function GetShortFileName(ByVal LongFileName As String) As String
Dim buffer As String, length As Long
' Prepare the receiving buffer
buffer = Space$(300)
length = GetShortPathName(LongFileName, buffer, Len(buffer))
' if return value was non-zero, estract the result
' else, it returns a null string (probably
GetShortFileName = Left$(buffer, length)
End Function
Merci d'avance au gentil programmeur qui se penchera sur mon cas

jeudi 9 juillet 2009 à 18:21:23 | Re : conversion long filename vers short filename

jmf0

Membre Club
Bonjour,

Comment (valeur) passes-tu le paramètre LongFileName à ta fonction ?
La ligne de code exacte, avec le nom de chemin complet exact.
jeudi 9 juillet 2009 à 20:58:23 | Re : conversion long filename vers short filename

casy

Membre Club
Chez moi GetShortFileName ("C:\Program Files\Fichiers communs\Microsoft Shared\Windows Live\WindowsLiveLogin.dll") retourne bien C:\PROGRA~1\FICHIE~1\MICROS~1\WINDOW~1\WINDOW~1.DLL


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
vendredi 10 juillet 2009 à 05:31:40 | Re : conversion long filename vers short filename

yyyx

 														 																Alors, voici le code complet de la mini appli test crée pour l'occasion (ce bug me semble bizarre quand même) 																

Private Declare Function GetShortPathName Lib "kernel32" Alias _
"GetShortPathNameA" (ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

' Convert a long filename into the short 8.3 format
' if the file doesn't exist, return a null string

Function GetShortFileName(ByVal LongFileName As String) As String
Dim buffer As String, length As Long
' Prepare the receiving buffer
buffer = Space$(300)
length = GetShortPathName(LongFileName, buffer, Len(buffer))
' if return value was non-zero, estract the result
' else, it returns a null string (probably
GetShortFileName = Left$(buffer, length)
End Function

Private Sub Form_load()
Me.AutoRedraw = True
Dim pathTest As String
pathTest = "C:\Program Files\Fichiers communs\Microsoft Shared\Web Folders\MSONSEXT.DLL"
Me.Print pathTest
Me.Print GetShortFileName(pathTest)

pathTest = "C:\Mes Documents\Long Name File.txt"
Me.Print pathTest
Me.Print GetShortFileName(pathTest)
End Sub

Et voici la jolie fenêtre créée :

le bug en question

Nb : Je guarantis que les deux fichiers utilisés ci-dessus pour le test existent

vendredi 10 juillet 2009 à 08:56:41 | Re : conversion long filename vers short filename

casy

Membre Club
Et alors ou est le problème ???????

MSONSEXT.DLL est déjà au format 8.3, son nom court est tout simplement égal à son nom long.

Essaye sur un fichier qui n'est pas déjà au format 8.3 !!!!!!!!!!


---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
vendredi 10 juillet 2009 à 09:02:22 | Re : conversion long filename vers short filename

casy

Membre Club

Oupsss désolé j'avais pas vu le second fichier

Es-tu sur que le dossier C:\Mes Documents existe ???????
Sous XP normalement le dossier virtuel Mes documents pointe vers le dossier physique C:\Documents and Settings\<user>\Mes documents

Et en utilisant le bon dossier ça marche sans problème

---- Sevyc64  (alias Casy) ----
# LE PARTAGE EST NOTRE FORCE #    [ Lien ]
vendredi 10 juillet 2009 à 14:43:17 | Re : conversion long filename vers short filename

yyyx

J'ai créé un dossier "Mes Documents" pour le test, il aurait pu s'appeler "Un Dossier Au Nom Relou" si j'avais voulu. D'ailleurs, si le fichier n'existe pas, il me semble que l'api retourne une chaine vide ?
Le truc, c'est que seuls les fichiers indexés par le système semblent être convertis.
Par exemple, en placant un dossier au nom long sur le bureau, seule la partie prévue par windows dans l'arborescence est convertie.
Par exemple :
C:\Documents and Settings\laurent.KOSVOCORE\Bureau\chant claire\enregistrement 1.wav
Devient :
C:\DOCUME~1\LAUREN~1.KOS\Bureau\chant claire\enregistrement 1.wav

Mon problème, c'est que la fonction qui récupère le tout après transformation n'accepte pas les espaces dans les noms de fichiers, mais choppe sans pb les noms courts. Mais bon, si windaube et son api à 2 balle continuent comme ca, je pense que je vais chercher comment faire la suite autrement.
samedi 11 juillet 2009 à 15:16:18 | Re : conversion long filename vers short filename

PCPT

Administrateur CodeS-SourceS
salut,

l'api ne retourne rien si le fichier n'existe pas, exact

fichier n'existe pas => j'ai 3 lignes (normal)
fichier existe : 4e ligne = C:\MESDOC~1\LONGNA~1.TXT

peux-tu préciser ton OS?? (apparemment XP mais soyons sûr) avec l'architecture exacte (32 ou 64bits?)



samedi 11 juillet 2009 à 15:36:55 | Re : conversion long filename vers short filename

yyyx

Déjà, merci à vous tous qui vous penchez sur mon PB :
je suis sous XP sp2 32 bits
Par contre, j'utilise la version LSD , pas forcément légale, je ne suis donc pas à jour et ceci est peut-être un bug connu corrigé dans l'un des nombreux correctifs. Le pire étant que mon école me donne accès à MSDN, mais j'ai pas encore eu le courage de formater, et ça dure depuis 2 ans quand même...

(
Sinon, félicitation, bientôt ton 10 000 è message sur vbfrance, Joyeux Anniversaire
)
samedi 11 juillet 2009 à 16:01:55 | Re : conversion long filename vers short filename

PCPT

Administrateur CodeS-SourceS
sur support.microsoft.com, le bug se rapprochant le plus est un problème d'enregistrement COM avec le nom long
çà ne nous aide pas trop, mis à part que le bug est résolu par le SP3 de VB6

je suis aussi tombé sur un article similaire à ton bug, mais spécifique à NT4.
ta version d'XP, bien que non corrigée, est du NT5. logiquement aucun lien donc

la meilleure piste pour le moment reste donc le SP6 de VB6, est-il installé?
http://logiciel.codes-sources.com/logiciels/Service-Pack-pour-Visual-Basic-6-0---SP-144.aspx

(ah oui tiens. beh bientôt merci alors )



Cette discussion est classée dans : fichier, buffer, long, string, filename


Répondre à ce message

Sujets en rapport avec ce message

Telechargement SUR de fichier [ par quantum59 ] Bonjour,Dans mon code, j'ai utilisé une fonction qui telecharge un fichier texte.Le problème, c'est que ma fonction n'est pas sur car il arrive parfoi Impression ou sauvegarde fichier via vb excel [ par silverdark1984 ] Bonjour a tous Voila mon probleme...J'ai des fichiers dans un dossier, en .pdf ( 1 ou plusieurs pages ) et j'aimerai avoir chaques feuilles dans un f Installer un fichier [ par Sinsitrus ] Salut à tous ! J'ai supprimé l'extension d'un fichier .msi Dans mon appli VB6 j'ai ceci : [code=vb]Private Declare Function ShellExecute Lib "shell32 Cryptage [ par YannGotti ] Code source de 3 fonctions:Private Function WriteBinaryInformations(FileName As String, Text As String)If Not Len(Text) = 1020 Then If Len(Text) Comment utiliser ce code?? [ par programmationniste ] salut je suis un débutant quelqu'un peut me dire comment utiliser ce code (trouvé sur codes sources)  pour imprimer un fichier  ' APIs  + Const Priva Déclaration sous VB.NET - Galère buffer !! [ par COlive ] Voila, j'ai la fonction suivante : Public Sub Connect()V_Busy = True< lancer un fichier par le shell [ par coquille100 ] je veux pouvoir exécuté un fichier a partir de ca (le but complet est assez compliké ne me demandé pas l'interet c trop long a expliqer) je me suis Problème impression [ par guitooo ] Salut!Je voudrais imprimer un fichier Word depuis une application que j'ai crée en VB6.Ne sachant pas le faire j'ai cherché sur le forum et j'ai trouv Enregistrer dans un fichier INI [ par piep14 ] Bonjour, j'aimerais écrire dans un fichier INI. Jj'ai donc trouvé dans la FAQ la méthode a appliquer mais je n'arrive pas à l'utiliser !!! J'ai fai [excel] Envoie fichier ouvert par ftp [ par didrocks ] Bonjour tout le monde!J'aimerais qu'à chaque enregistrement de mon fichier excel (enregistré dans un répertoire temporaire), celui-ci s'envoie par ftp


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,117 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales