Jump to content

Déclencher une copie de fichiers de l'explorer


Recommended Posts

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 ?

Link to comment
Share on other sites

  • 2 months later...

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é...

Link to comment
Share on other sites

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)

:-D

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...