Page 1 sur 1

[FUNC] Renommer un Fichier

Posté : ven. 12 mai 2017 03:02
par Numeric
AutoIt nous offre Plusieurs méthodes pour renommer un fichier. Mais pas de "FileRename" :mrgreen:
voici une fonction pour renommer proprement vos fichiers.
#include <WinAPIFiles.au3>

; #FUNCTION# ===========================================================================================================
; Name ..........: __WinAPIFileRename
; Description ...: Renomme un fichier
; Syntax ........: __WinAPIFileRename($iFilePath[, $aNewName = ""])
; Parameters ....: $iFilePath           - an integer value.
;                  $aNewName            - [optional] an array of unknowns. Default is "".
; Return values .: True Or False
; Author ........: Numeric
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func __WinAPIFileRename($iFilePath, $aNewName = "")
        Local $iFullPath = _WinAPI_GetFullPathName($iFilePath)
        Local $dFullPath = _WinAPI_GetFullPathName($aNewName)

        Local $aFilesExtension = _WinAPI_PathFindExtension($iFullPath)
        Local $setDestExtension = _WinAPI_PathFindExtension($dFullPath)
        Local $SetName
        If $aFilesExtension <> $setDestExtension And $setDestExtension <> "" Then
                $SetName = StringTrimRight($dFullPath, StringLen($setDestExtension)) & $aFilesExtension
        Else
                $SetName = $dFullPath & $aFilesExtension
        EndIf

        If Not _WinAPI_CopyFileEx($iFilePath, $SetName) Then
                Return False
        Else
                FileDelete($iFilePath)
        EndIf
        Return True
EndFunc   ;==>__WinAPIFileRename


Local $sText = "Voici le contenu du fichier txt : nom initial = NumericFile"
Local Const $sPath = @ScriptDir & "\ NumericFile.txt"
If Not FileExists($sPath) Then
        FileWrite($sPath, $sText)
        MsgBox(48, "", "Fichier créé avec succès!")
EndIf
Sleep(50)

If __WinAPIFileRename($sPath, "AutoItFile") Then
        MsgBox(48, "", "Fichier Renommé avec succès!")
Else
        MsgBox(16, "", "Erreur!")
EndIf

Re: [FUNC] Renommer un Fichier

Posté : ven. 12 mai 2017 10:03
par TommyDDR
Comment renommer un fichier en voulant explicitement supprimer son extension ?
Ou plus simplement : Comment renommer "file.txt" en "file.ini" ?
:P
De mon point de vue, si le développeur veut faire un rename("a.txt", "b") il ne faut pas vouloir lui mâcher le travail en ajoutant une extension ;)

Re: [FUNC] Renommer un Fichier

Posté : ven. 12 mai 2017 13:51
par jchd
Un simple FileMove() me semble plus efficace.

Re: [FUNC] Renommer un Fichier

Posté : sam. 13 mai 2017 20:49
par TomAijerrie
Entièrement d'accord avec jchd, lorsque je teste avec de gros fichiers encodé en utf-8, la fonction proposée dans le premier message ne marche plus correctement.
Alors que FileMove() ne devrais pas poser de problème (j'utilise FileCopy, mais c'est presque pareil, c'est juste que dans un cas l'original est conservé)

Re: [FUNC] Renommer un Fichier

Posté : dim. 14 mai 2017 21:48
par mikell
RunWait(@ComSpec & ' /C REN "' & $source & '" "' & $dest & '"', $workingdir, @SW_HIDE)

permet de renommer un fichier "test.txt" en "Test.txt" (ce que FileMove ne fait pas, du moins pas chez moi)

Re: [FUNC] Renommer un Fichier

Posté : lun. 15 mai 2017 13:34
par jchd
Certes, car les systèmes de fichiers natifs de Windows sont insensibles à la casse. Mais, justement, l'intérêt d'une telle opération est uniquement d'ordre cosmétique.

Re: [FUNC] Renommer un Fichier

Posté : lun. 15 mai 2017 15:00
par orax

Code : Tout sélectionner

#include <WinAPIFiles.au3>
_WinAPI_MoveFileEx("a.txt", "A.txt")
Dans cet exemple, le fichier a.txt est bien renommé en A.txt (testé sur Windows 10).