[FUNC] Renommer un Fichier

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Numeric
Niveau 5
Niveau 5
Messages : 106
Enregistré le : mer. 23 mars 2016 08:17
Status : Hors ligne

[FUNC] Renommer un Fichier

#1

Message 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
De 0 et 1 vers les étoiles , tout part du Binaire, Numeric

Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 1869
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [FUNC] Renommer un Fichier

#2

Message 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 ;)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2137
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [FUNC] Renommer un Fichier

#3

Message par jchd »

Un simple FileMove() me semble plus efficace.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [FUNC] Renommer un Fichier

#4

Message 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é)

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5993
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [FUNC] Renommer un Fichier

#5

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2137
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [FUNC] Renommer un Fichier

#6

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [FUNC] Renommer un Fichier

#7

Message 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).
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

Répondre