njoyard Posté(e) le 10 juin 2006 Partager Posté(e) le 10 juin 2006 Salut ! Je voudrais lancer une commande Windows qui déclenche un déplacement de fichier. Je programme en PHP mais je poste dans cette section car ce que je cherche n'est pas spécifique au php. Le but de mon script est de déplacer des fichiers, parfois d'un disque dur à un autre. En fait, le problème est que si j'utilise une fonction du langage pour ce faire (par exemple rename(), que ce soit en PHP ou en C d'ailleurs), c'est le langage qui va gérer le déplacement, ce qui implique que l'exécution va attendre que ce déplacement soit terminé pour continuer. Du coup ce que j'aimerais faire c'est lancer une commande windows (avec exec() en PHP ou system() en C) qui demande à explorer.exe de déplacer le fichier, comme si j'avais fait un drag'n drop, de manière à ce que mon prog déclenche le déplacement et continue son exécution sans attendre que ce soit terminé. Je pourrais créer un .bat avec "move machin bidule" dedans et le lancer depuis mon script (ou un .vbs d'ailleurs), mais le problème c'est que je veux que ce soit l'explorer qui gère le déplacement (étant donné notamment que si par exemple SuperCopier est installé, je veux que ce soit lui qui prenne en charge l'opération). Je pensais à une fonction de shell32 appellée via rundll32, mais je ne trouve pas laquelle... Vous avez une idée ? edit: j'ai trouvé SHFileOperationA dans shell32.dll, qui permet de faire ça. Mais elle prend une structure en argument, et je ne sais pas comment passer une structure via rundll32. Vous savez comment faire, ou bien je vais être obligé de faire un petit prog qui l'appelle ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Le Saigneur Sombre Posté(e) le 20 août 2006 Partager Posté(e) le 20 août 2006 salut. Dans l'api Windows, tu as deux fonctions CopyFile et MoveFile; BOOL CopyFile( LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists ); http://msdn.microsoft.com/library/default....fs/copyfile.asp BOOL MoveFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName); http://msdn.microsoft.com/library/default....fs/movefile.asp BOOL DeleteFile(LPCTSTR lpFileName); les LPCTSTR c'est des char*... Ca marche super bien. Pas besoin de faire compliqué... Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 20 août 2006 Partager Posté(e) le 20 août 2006 sinon, tu fork() le pid fils fait la copie, et le père continue de s'éxécuter. ce qui te permet avec le père de marquer un point d'arrêt si tu le veux à n'importe quel moment (attendre que le fils se soit terminer, donc que la copie soit finie) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Baldurien Posté(e) le 22 août 2006 Partager Posté(e) le 22 août 2006 Ce qui - sous Windows, rappelons le - est très utile. Pour ton problème, je te suggère de regarder du côté des threads windows (je code sous Windows, mais l'API Windows, bye bye) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.