Autres fonctions

 

 

Image non trouvée ! Utilise shlwapi.lib et shlwapi.h

 

Microsoft met à disposition différentes fonctions de manipulation de nom de fichier qui peuvent être bien utiles:

Tout d'abord les fonctions plutôt utiles à l'affichage:

GetShortPathName() pour convertir des noms de fichiers en version courte (Sauce MS-DOS). Les noms de fichier/répertoire ne pouvaitent pas excéder 8 caractères + 3 avec l'extension. Pour rester compatible, cette fonction permet de travailler avec des fichiers créés avec des noms de taille bien supérieur.

DWORD GetShortPathName(
   LPCTSTR lpszLongPath,
   LPTSTR lpszShortPath,
   DWORD cchBuffer
   );

Avec comme paramètres:

lpszLongPath pointeur sur une chaîne de caractères terminée par \000 qui est le chemin "long" du fichier/répertoire. Considérez que la chaîne de caractères (répertoires intermédiaires compris) ne doit pas dépasser MAX_PATH pour rester compatible.

lpszShortPath pointeur sur un buffer qui recevra le nom court correspondant au nom indiqué dans lpszLongPath (terminé par \000).

cchBuffer Taille du buffer contenant le nom court du fichier en TCHAR.

En sortie:

Si la fonction ne détecte pas d'erreur, la valeur correspond à la taille réelle du nom court en TCHAR (sans le \000).

Si cette taille est plus grande que cchBuffer, votre buffer n'est pas assez grand, il faudra donc recommencer avec une taille correcte de buffer.

En principe, si vous passez 0 dans cchBuffer, vous obtiendriez tout de suite la bonne taille...(pas essayé). Il ne vous restera alors plus qu'à relancer la fonction un seconde fois.

Si le nom que vous passez est déjà court, il ne sera évidemment pas plus court après un appel à la fonction !

 

GetLongPathName() pour retrouver un nom long d'un fichier dont le nom est court. Attention, cette fonction n'existe pas forcement, il faudra alors utiliser la fonction FindFirst().

DWORD GetLongPathName(
   LPCTSTR lpszShortPath,
   LPTSTR lpszLongPath,
   DWORD cchBuffer
   );

Cette fonction est similaire à la précédente...

 

GetFullPathName() pour compléter un chemin avec un nom de fichier. Ne pas confondre avec la fonction précédente !

DWORD GetFullPathName(
   LPCTSTR lpFileName,
   DWORD nBufferLength,
   LPTSTR lpBuffer,
   LPTSTR* lpFilePart
   );
Les paramètres

lpFileName: pointeur sur un nom valide de fichier qui pourra être en 8.3 ou long.
nBufferLength: Taille du buffer qui recevra la chaîne de caractères contenant le lecteur et le chemin (en TCHAR).
lpBuffer: Pointeur sur le buffer qui recevra la chaîne de caractères contenant le lecteur, le chemin et le nom du fichier terminé par \000.
lpFilePart: Pointeur vers une variable chargée de récupérer l'adresse (dans lpszPath) de la chaine de caractères constituant le dernier caractère du chemin du fichier. Ainsi, vous pouvez facilement récupérer que le chemin généré.

En sortie:

même chose que les fonctions précédentes...

 

PathCompactPath() : cette fonction est plutôt utile pour un affichage dans un espace réduit. En effet, cette fonction remplace une partie du nom par "...". Attention, le nom du fichier ne sera jamais réduit. La fonction peut donc échouer s'il n'y a pas assez de place.

BOOL PathCompactPath(
HDC hDC,
LPTSTR lpszPath,
UINT dx
);

Les paramètres:

En entrée:

hDC : Handle d'un contexte de périphérique pour connaître les caractéristiques de la fonte utilisée.
lpszPath : Pointeur sur une chaîne de caractère terminée par \000 contenant le chemin et le nom du fichier à compacter.

dx : Espace disponible en pixel pour afficher le chemin compacté.

En sortie, la fonction retourne TRUE si pas d'erreur et lpszPath contient le chemin compacté. FALSE sinon

 

Ensuite des fonctions de contrôle:

PathIsDirectory() pour déterminer si le chemin spécifié est un dossier.

BOOL PathIsDirectory(
LPCTSTR pszPath
);

Les paramètres

pszPath : Pointeur sur une chaîne de caractères terminée par \000 et de longueur maxi. de MAX_PATH.

En sortie: Vrai si le chemin est valide, false sinon.

 

PathFileExists() pour vérifier l'existance d'un fichier.

BOOL PathFileExists(
LPCTSTR pszPath
);

Tout pareil que la fonction précédente...

 

Enfin des fonctions plus générales de manipulation sur la chaîne de caractères composant le chemin et le nom du fichier/répertoire:

(Utilise include <shlwapi.h>)

PathCanonicalize() supprimer toutes les références symboliques (les .. et les .) du chemin et le convertit en chemin absolu. Ex. : (c:\a\.. sera converti en c:\).

BOOL PathCanonicalize(
LPTSTR lpszDst,
LPCTSTR lpszSrc
);

Les paramètres:

lpszDst Pointeur sur un tampon qui recevra la chaîne de caractères convertie. Attention, il faut que la taille soit au moins de MAX_PATH.
lpszSrc Pointeur sur une chaîne de caractères terminée par NULL et de longueur maximum à MAX_PATH qui contiendra le chemin à convertir.

En sortie, la fonction retourne TRUE si pas d'erreur, FALSE sinon.

 

PathFindExtension() retourne l'extension du nom de fichier spécifié.

LPTSTR PathFindExtension(
LPCTSTR pPath
);

En entrée, le fichier.

En sortie, une adresse qui pointe sur une chaîne de caractères contenant l'extension trouvée.

 

PathRemoveExtension() supprime l'extension du chemin, si celle-ci existe.

Attention, utilisation de l'include shlwapi.h (c'est un header !)

void PathRemoveExtension(
LPTSTR pszPath
);

En entrée, pszPath est un pointeur sur une chaîne de caractères qui contient le chemin/nom de fichier avec l'extension. (terminé par 0 et de longueur maxi. à MAX_PATH)

En sortie, pszPath est un pointeur sur une chaîne de caractères qui contient le chemin/nom de fichier sans l'extension. (terminé par 0)

 

PathFindFileName() retourne le nom de fichier dans le chemin spécifié.

LPTSTR PathFindFileName(
LPCTSTR pPath
);

En entrée, le chemin + fichier de longueur maxi. à MAX_PATH

En sortie, un pointeur sur le nom du fichier trouvé, ou si non trouvé, un pointeur sur le début de la chaîne.

 

PathGetArgs() retourne les arguments qu'un utilisateur aurait pu saisir après le chemin+nomdefichier.

LPTSTR PathGetArgs(
LPCTSTR pszPath
);

En entre, le chemin + les arguments

En sortie, la fonction pointe sur une chaîne de caractères qui contriendra les arguments (ou non) terminée par NULL.

Si la chaîne en entrée est NULL, le résultat sera NULL en sortie.

 

PathRemoveArgs() supprime les arguments du chemin qui sont passés aux fichiers (les arguments étant du type .. ou .) pour obtenir un chemin absolue:

void PathRemoveArgs(
LPTSTR pszPath
);

Avec pszPath un pointeur sur une chaîne de caractères terminée par \000 et de longueur maxi. de MAX_PATH contenant les arguments.

En sortie, pszPath contient la nouvelle chaîne de caractères sans les arguments.