Page 1 sur 1

[FUNC] Renommer un Fichier

Posté : ven. 12 mai 2017 04: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 11: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 14:51
par jchd
Un simple FileMove() me semble plus efficace.

Re: [FUNC] Renommer un Fichier

Posté : sam. 13 mai 2017 21: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 22: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 14: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 16: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).