[R] Problème avec la fonction "FileMove"

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

[R] Problème avec la fonction "FileMove"

#1

Message par ManiaqueMogg »

Bonjour,
J'espère que j'ai respecté les règles de présentation

Présentation du script :
Le but de se script est de déplacer des images en fonction de dimensions "fond d'écran", sinon elles sont déplacées en fonction de la largeur de dimensions "fond d'écran" ou sinon elles ne sont pas déplacées

Pour que le script fonctionne voici les répertoires et sous-répertoires qui doivent être créés à la racine du script :
01_Images <-- les Images à trier
02_Wallpaper <-- les Images trié par taille
>>> 800x600
>>> 1024x768
03_Resize <-- les Images à retravailler
>>> 800
>>> 1024

Problème :
J'ai un problème qui peu sembler un peu bête, les fonctions "FileMove" et "FileDelete" ne fonctionnent pas comme si le script n'avait pas les droits pour exécuter cette action... Les images ne se déplacent pas et ne se suppriment pas !!!

J'ai fait plusieurs tests pour voir si le problème ne venait pas des divers condition et boucle mais quand je remplace dans mon script "FileMove" par "FileCopy" les bonnes images se copies dans les bon répertoire.
► Afficher le textele script
Merci de votre aide !!!
Modifié en dernier par ManiaqueMogg le lun. 05 janv. 2009 20:34, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#2

Message par Tlem »

Avez vous essayé avec le flag 8 ?

Code : Tout sélectionner

FileMove($Src, $Dst, 8)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#3

Message par ManiaqueMogg »

J'ai regarder dans mon historique et j'ai essayé avec un flag 8 et même avec un flag 9.

On est d'accord sur le fait qu'un FileMove est un FileCopy suivi d'un FileDelete donc si je le remplace dans mon script :

Code : Tout sélectionner

FileMove($Src, $Dst, 1)
par

Code : Tout sélectionner

FileCopy($Src, $Dst, 1)
FileDelete($Src)
La copie de fichier s'effectue bien mais pas la suppression.

Je remets mon FileMove
Là, le résultat est intéressant les fichiers copiés précédemment ont été supprimé.

J'en conclu lors de mon FileMove le fichier est copié dans le bon répertoire mais comme il n'arrive pas à supprimer le fichier source, il annule l'opération, supprimant par la même occasion le fichier précédemment copié à cause du flag 1

Donc si je veux résoudre mon problème de FileMove, il faut que j'arrive à résoudre mon problème de FileDelete qui n'en était pas un au départ vu que je utilisais pas cette fonction. CQFD

Sur le coup je sais pas si vous m'avez suivi :? :? :?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#4

Message par Tlem »

ManiaqueMogg a écrit :On est d'accord sur le fait qu'un FileMove est un FileCopy suivi d'un FileDelete
Oui, mais non... :roll:
En fait, le FileMove déplace le fichier. Mais 2 cas peuvent se présenter.
1 - Le déplacement ce fait sur le même disque et même partition. Dans ce cas seul la MFT est mise à jour et il n'y à pas de 'copie' de fichier.
2 - Le déplacement ce fait sur une autre partition ou un autre disque. Dans ce cas, effectivement il y a copie puis suppression de la source.
ManiaqueMogg a écrit :La copie de fichier s'effectue bien mais pas la suppression.
Cela signifie sans doute que le fichier source est occupé par le système et donc vous ne pouvez le supprimer, ou alors vous n'avez pas les droits nécessaires à une telle opération.
Pour en être sur, utilisez la commande Move dans une console batch pour voir si cela est du à un droit d'accès ou un fichier occupé par le système.
Vous pouvez aussi essayer de faire un Coupé/Collé à partir d'une fenêtre Explorer.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#5

Message par ManiaqueMogg »

J'ai fait tous les testes que vous m'avez préconiser de faire et bien tout fonctionne correctement. J'ai même fait un script bateau qui fonctionne également :

Code : Tout sélectionner

$Src = "Fichier.txt"
$Dst = "Dossier\Fichier.txt"
FileMove($Src, $Dst, 1)
Comme vous l'avez dit le fichier source est occupé par le système plus exactement je pense qu'il est occupé soit par le "_FileListToArray" soit par le "_GDIPlus_ImageLoadFromFile" mais j'ai eu beau jouer avec "FileOpen" et "FileClose", sans succès.

:( :( :(
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#6

Message par ManiaqueMogg »

Je viens de cibler le problème sur "_GDIPlus_ImageLoadFromFile" avec ce petit script qui ne fonctionne pas :

Code : Tout sélectionner

#include <GDIPlus.au3>

$Src = "image.jpg"

_GDIPlus_Startup()
    $LoadImg = _GDIPlus_ImageLoadFromFile($Src)
    $WidthImg = _GDIPlus_ImageGetWidth($LoadImg)
    $HeightImg = _GDIPlus_ImageGetHeight($LoadImg)
_GDIPlus_ShutDown()

$SizeImg = $WidthImg & "x" & $HeightImg
$Dst = $SizeImg & "\image.jpg"

FileMove($Src, $Dst, 9)
Bon faut que je trouve un moyen de "libérer" le fichier !!!
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#7

Message par ManiaqueMogg »

J'ai trouvé, en utilisant "_GDIPlus_ImageDispose" :mrgreen: !!! Par contre je sais pas si j'utilise cette fonction comme il faut vu que j'ai pas trouvé d'info dessus. :?

Code : Tout sélectionner

#include <GDIPlus.au3>

$Src = "image.jpg"

_GDIPlus_Startup()
    $LoadImg = _GDIPlus_ImageLoadFromFile($Src)
    $WidthImg = _GDIPlus_ImageGetWidth($LoadImg)
    $HeightImg = _GDIPlus_ImageGetHeight($LoadImg)
    _GDIPlus_ImageDispose($LoadImg)
_GDIPlus_ShutDown()

$SizeImg = $WidthImg & "x" & $HeightImg
$Dst = $SizeImg & "\image.jpg"

FileMove($Src, $Dst, 9)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#8

Message par ani »

le fichier source image se trouve ou ? il faut donner le lien absolue et non son nom.

le _Imagedispose tu peu le retirer il ne sert pas ton exemple ;)

regarde sur imagefrom dans l'aide ;)

je visionne le filemove car j'ai pas trop suivit le soucis (rp=revient promis ^^')

edit = pour la destination et la source faut donner un lien genre c:\ici\Image\image.jpg


le 8 signifie création du dossier de destination si il n'existe pas
le 1 il envoi le fichier et l'ecrase (même existant)
8+1 = 9 (crée le répertoire et ecrase le fichier)
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#9

Message par moutelous »

Bonjour,
ManiaqueMogg a écrit :$Dst = $SizeImg & "\image.jpg"
Attention ManiaqueMogg, le "\" est un caractère prohibé pour le nommage d'un fichier ...


A+
A+
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#10

Message par ManiaqueMogg »

Je ne veux pas être irrespectueux : Excuse-moi mais de quoi vous me parle ??
:shock: :shock: :shock:
ani a écrit :le fichier source image se trouve ou ? il faut donner le lien absolue et non son nom.
En mettant : $Src = "image.jpg" cela correspond à un fichier image à la racine du script. C'est comme si je mettais $Src = @ScriptDir & "\image.jpg"
ani a écrit :edit = pour la destination et la source faut donner un lien genre c:\ici\Image\image.jpg
Même explication que pour le fichier source
ani a écrit :le _Imagedispose tu peu le retirer il ne sert pas ton exemple ;)
il sert justement à "libérer" le fichier image pour que je puisse le déplacer.
ani a écrit :le 8 signifie création du dossier de destination si il n'existe pas
le 1 il envoi le fichier et l'ecrase (même existant)
8+1 = 9 (crée le répertoire et ecrase le fichier)
Je sais déjà tout cela vu que je les ai utilisé dans mes différents testes pour résoudre mon problème.
ani a écrit :regarde sur imagefrom dans l'aide ;)
Je vais regarder ça
moutelous a écrit :Attention ManiaqueMogg, le "\" est un caractère prohibé pour le nommage d'un fichier ...
le "\" permet de rentrer dans le répertoire et n'est pas pris en compte dans le nom du fichier.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#11

Message par moutelous »

RE ....
ManiaqueMogg a écrit :le "\" permet de rentrer dans le répertoire et n'est pas pris en compte dans le nom du fichier.
Bien sûr que si puisque le répertoire de destination "$Dst" est la concaténation de "$SizeImg" et de "\image.jpg" ce qui donne quelque chose du genre "1024x780\image.jpg"

A+

PS: ...Ceci dit cela ne règle pas votre problème de fichier "Locker" ...

Je laisse le soin à Ani de répondre aux questions le concernant ....

A+
A+
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#12

Message par ManiaqueMogg »

moutelous a écrit :Bien sûr que si puisque le répertoire de destination "$Dst" est la concaténation de "$SizeImg" et de "\image.jpg" ce qui donne quelque chose du genre "1024x780\image.jpg"
Il y a plusieurs façon de faire un FileMove

Code : Tout sélectionner

$Src = "Fichier.txt"
$Dst = "Dossier\"

FileMove($Src, $Dst, 9)
Soit

Code : Tout sélectionner

$Src = "Fichier.txt"
$Dst = "Dossier\Fichier.txt"

FileMove($Src, $Dst, 9)
L'avantage de la deuxième méthode c'est qu'on peut en même temps renommer le fichier. Et le "\" n'est pas pris en compte dans le nom fichier.

Code : Tout sélectionner

$Src = "Fichier.txt"
$Dst = "Dossier\Pouet-Pouet.txt"

FileMove($Src, $Dst, 9)
moutelous a écrit :PS: ...Ceci dit cela ne règle pas votre problème de fichier "Locker" ... pour "_Imagedispose " il faut utiliser le handle du fichier et non son nom ....
Je n'ai plus le problème de fichier "Locker" en utilisant "_GDIPlus_ImageDispose" et j'utilise le "handle". Le dernier script que j'ai posté fonctionne mais j'aurai aimé savoir si "_GDIPlus_ImageDispose" était bien utilisé et si cette fonction avait une autre utilité.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Problème avec la fonction "FileMove"

#13

Message par moutelous »

RE ...

Nos messages se croisent ...

Mille excuses ... j'étais partis avec l'idée que "$Dst" était le nom du fichier de destination ....d'où mes remarques ... ( je n'avais pas créé de répertoire approprié lors de mes tests ....)

A+
A+
ManiaqueMogg
Niveau 1
Niveau 1
Messages : 12
Enregistré le : mer. 31 déc. 2008 16:30
Status : Hors ligne

Re: [R] Problème avec la fonction "FileMove"

#14

Message par ManiaqueMogg »

J'ai trouvé ce que je cherchais : _GDIPlus_ImageDispose
Merci de votre aide. Je passe le sujet en résolu.
:) :) :)
Répondre