SHFileOperation

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 5 déc. 2006 à 21:14
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 11 déc. 2006 à 00:14
Bonjour,
J'utilise actuellement l'API SHFileOperation.

Mon problème est que la quantité de donnée que je dois copier (via cet API) est assez grande et transit via un réseau. J'aimerais donc pouvoir spécifier à la fonction de copier QUE les fichiers qui sont PLUS récents que ceux existants déjà (s'ils existent). J'aimerais avoir confirmation que ce n'est pas possible via cette API, et dans l'affirmative, savoir s'il existe une alternative ?

Merci!

<hr size="2" />-Blog-

6 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 déc. 2006 à 11:03
salut,

le problème dans ton cas, c'est qu'il faudrait connaitre le contenu des 2 répertoires (cible et source) avant la copie. Une fois que tu connais ca, à toi de copier les bons fichiers.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 déc. 2006 à 11:46
Le problème c'est que je suis assez soucieux des performances (la taille du répertoire est assez grande).
Si je comprends bien, je devrais d'abord scanner les deux répertoires (cible et source), récupérer les fichiers à copier (les plus récents), puis lancer la copie via l'API?

Ca me paraît largement plus lent que de regarder au fur et à mesure si le fichier courrant est plus récent ou pas, non ?
Peut-être que cet API n'est pas la bonne solution... WMI ?
Autres?

<hr size="2" />-Blog-
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 déc. 2006 à 11:57
File.Copy utilise l'api suivante :

[boolCopyFile(string src, string dst, bool failIfExists);
Maintenant, il faut comparer les perfs des 2 méthodes...

Sinon, la solution est "peut-être" de lister la liste des fichiers à copier et au fur à mesure comparer les dates...

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 déc. 2006 à 12:08
Moui jvais voir alors...
L'avantage de SHFileOperation c'est que ca m'ouvre une petite fenêtre qui indique le fichier en cours de copie ainsi que la progression totale (mon application est une application Console).

<hr size="2" />-Blog-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 déc. 2006 à 14:29
Bon, je vais passer par solution qui est d'énumérer tous les fichiers dont j'ai besoin, et passer cette liste à la structure

SHFILEOPSTRUCT.
J'ai vu que cette structure avec un flag qui s'appelle fAnyOperationsAborted qui permet de savoir si le user à quitter ou non l'opération en cours, mais apparement cette valeur vaut toujours 0 (que je clique sur cancel ou non durant la copie).
Une idée?













<hr size="2" />



-Blog-
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 déc. 2006 à 00:14
Salut,

Tu l'as déclarée comment ta structure SHFILEOPSTRUCT ?
Il me semble qu'il faut :
- soit passer par un LayoutKind à Sequential avec un Pack à 1
- soit passer par un LayoutKind à Explicit et préciser les positions correctes sur chaque champs via l'attribut FieldOffset.

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous