UDF > WinAPIEx > Files & Devices > Files >


_WinAPI_SetFileShortName

Définit le nom court d'un fichier spécifié

#include <WinAPIFiles.au3>
_WinAPI_SetFileShortName ( $hFile, $sShortName )

Paramètres

$hFile Le handle du fichier. Le fichier doit être sur un volume avec un système de fichiers NTFS. En outre, le fichier doit être ouvert avec soit le droit d'accès $GENERIC_ALL, soit $GENERIC_WRITE|$DELETE, et avec l'attribut de fichier $FILE_FLAG_BACKUP_SEMANTICS.
$sShortName Le nom court valide pour le fichier. Si le nom court spécifié existe déjà, la fonction échoue et le code de la dernière erreur est ERROR_ALREADY_EXISTS (183).

Valeur de retour

Succès: Retourne True
Échec: Retourne False

Remarque

L'appelant de cette fonction doit avoir le privilège $SE_RESTORE_NAME.

Voir aussi

Consultez SetFileShortName dans la librairie MSDN.

Exemple

#include <APIFilesConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>
#include <WinAPIHObj.au3>
#include <WinAPIProc.au3>
#include <WinAPIShPath.au3>

Local Const $sTemp = @TempDir & '\Temporary File.txt'

; Vérifie le système de fichiers NTFS
If StringCompare(DriveGetFileSystem(_WinAPI_PathStripToRoot($sTemp)), 'NTFS') Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Le fichier doit être sur un volume avec le système de fichier NTFS.')
    Exit
EndIf

; Active le privilège "SeRestorePrivilege" pour effectuer l'opération de renommer
Local $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
Local $aAdjust
_WinAPI_AdjustTokenPrivileges($hToken, $SE_RESTORE_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)
If @error Or @extended Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Vous n''avez pas les privilèges requis.')
    Exit
EndIf

; Crée un fichier temporaire
FileWrite($sTemp, '')

ConsoleWrite('Ancien nom court: ' & _WinAPI_PathStripPath(FileGetShortName($sTemp)) & @CRLF)

; Définit le nom court "TEMP.TXT" pour le fichier
Local $hFile = _WinAPI_CreateFileEx($sTemp, $OPEN_EXISTING, BitOR($GENERIC_WRITE, $RIGHTS_DELETE), 0, $FILE_FLAG_BACKUP_SEMANTICS)
_WinAPI_SetFileShortName($hFile, 'TEMP.TXT')
_WinAPI_CloseHandle($hFile)

ConsoleWrite('Nouveau nom court: ' & _WinAPI_PathStripPath(FileGetShortName($sTemp)) & @CRLF)

; Supprime le fichier temporaire
FileDelete($sTemp)

; Restaure les  privilèges par défaut "SeRestorePrivilege"
_WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
_WinAPI_CloseHandle($hToken)