begin process at 2010 02 10 12:42:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > COPIE AVEC SHFILEOPERATION

COPIE AVEC SHFILEOPERATION


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :SHFILEOPSTRUCT, SHFileOperation, api, copie, fichier Niveau :Débutant Date de création :10/06/2009 Date de mise à jour :11/06/2009 15:55:14 Vu :924

Auteur : steph12358

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Bonjour

Voici un exemple de l'utilisation de la fonction SHFileOperation de l'api windows.

La fonction renvoie true si ok, false sinon ainsi qu'un code d'erreur en cas de problème
ex:
1223 lors de copie sur une clé usb pleine (disque plein)

PB: j'ai eu beau chercher je n'ai trouvé aucune documentation sur les codes
d'erreurs et d'éventuel messages "en clair" correspondants...


Source

  • #include <ShellApi.h>
  • (...)
  • bool ForceCopyFile(AnsiString source, AnsiString cible, int * errcode)
  • {
  • bool res;
  • res = false;
  • int cr;
  • char fsource[MAX_PATH];
  • char fcible[MAX_PATH];
  • *errcode = 0;
  • fsource[MAX_PATH];
  • fcible[MAX_PATH];
  • memset(fsource, 0, sizeof(fsource));
  • memset(fcible, 0, sizeof(fcible));
  • SHFILEOPSTRUCT shf;
  • shf.hwnd = Handle; //Handle de la fenêtre appelante
  • //nb: chaînes avec 2 zéros terminaux !
  • sprintf(fsource, "%s", source.c_str());
  • sprintf(fcible, "%s", cible.c_str());
  • shf.wFunc = FO_COPY;
  • shf.pFrom = fsource;
  • shf.pTo = fcible;
  • shf.fFlags=FOF_SILENT | FOF_NOCONFIRMATION;
  • cr = SHFileOperation(&shf);
  • if (cr==0)
  • res = true;
  • else
  • *errcode=cr; //pas documenté ?
  • return res;
  • }
#include <ShellApi.h>

(...)

bool ForceCopyFile(AnsiString source, AnsiString cible, int * errcode)
{
   bool res;
   res = false;
   int cr;
   char fsource[MAX_PATH];
   char fcible[MAX_PATH];

   *errcode = 0;

   fsource[MAX_PATH];
   fcible[MAX_PATH];
   memset(fsource, 0, sizeof(fsource));
   memset(fcible, 0, sizeof(fcible));

   SHFILEOPSTRUCT shf;

   shf.hwnd = Handle;             //Handle de la fenêtre appelante

   //nb: chaînes avec 2 zéros terminaux !
   sprintf(fsource, "%s", source.c_str());
   sprintf(fcible, "%s", cible.c_str());

   shf.wFunc = FO_COPY;
   shf.pFrom = fsource;
   shf.pTo   = fcible;

   shf.fFlags=FOF_SILENT | FOF_NOCONFIRMATION;

   cr = SHFileOperation(&shf);
   if (cr==0)
      res = true;
   else
      *errcode=cr;    //pas documenté ?

   return res;
  

}



 Historique

10 juin 2009 15:12:15 :
amélioration présentation et commentaires. Suppression d'une variable inutile...
11 juin 2009 15:55:14 :
le handle NULL ne permettait pas la copie sous certains systèmes (e: windows 2000, etc.) Le handle débloque apparemment la situation...

 Sources du même auteur

CALCUL DATE DE PAQUES (DATE MOBILE)

 Sources de la même categorie

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS par racpp
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI... par racpp
Source avec Zip Source avec une capture BROUILLAGE DES FICHIERS JAVASCRIPT ET CSS(WIN32) par gagah1
Source avec Zip Source avec une capture CHANGE CURSEUR par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
FICHIER ALBUM MUSICAL par imenouuuuuuuuuche
Source avec Zip COMMENTER CODE C <=> ASM (WIN64) par BruNews
Source avec Zip TXT SUPPRIMER LIGNES DOUBLONS (WIN32) par BruNews
Source avec Zip DUPLICATEUR DE FICHIERS par 0v3rb1t

Commentaires et avis

Commentaire de vecchio56 le 10/06/2009 16:47:55 administrateur CS

Pour les codes d'erreur :
http://msdn.microsoft.com/en-us/library/bb762164(VS.85).aspx

Apparemment la gestion des erreurs n'est pas super, et on ne peut pas se fier au code retourné par SHFileOperation (on sait juste s'il y a eu une erreur ou non).

Commentaire de steph12358 le 11/06/2009 15:46:48

Salut VECCHIO56

J'ai aussi trouvé ça depuis.

http://www.secretswindows.com/index.php?rubrique=erreurs&page=./erreurs/1000-2099.htm

Je crois que je vais laisser tomber cette fonction. Comme tu l'as fait remarquer les
codes d'erreurs ne sont pas trés parlants...

En fait je cherchais une fonction qui permettait de copier un fichier déjà ouvert par un autre programme sans provoquer de conflit... sinon je vais revenir à mon bête copyfile...tant pis!

A+

Commentaire de vecchio56 le 11/06/2009 18:21:24 administrateur CS

Qu'est ce que tu entends par "sans provoquer de conflit"?
Quel est selon toi l'intérêt d'utiliser SHFileOperation plutôt que CopyFile?

Commentaire de ghanmi04_05 le 30/06/2009 11:32:56

Comment arrêter la copy de windows en c++?!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Copie de fichier avec barre de progression [ par JMGR ] Salut,Comment peut-on copier un fichier avec une barre de progression ? Remplacer la copie de fichier de Windows [ par MangaII ] Salut !Quelqu'un sorai-t-il comment on pe remplacer la fonction de copie de fichier sous Windows par un programme maison !Mon but est d'optimiser la c Remplacer la fonction de copie de fichier sous Windows [ par MangaII ] Salut !Quelqu'un sorai-t-il comment on pe remplacer la fonction de copie de fichier sous Windows par un programme maison !Mon but est d'optimiser la c copie de fichier texte : prob fopen [ par Ascagne ] #include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;conio.c&gt; //conio.c pour dev-cpp conio.h normalementint main(){char entree,sortie; Retrouver un fichier ??? [ par iljamila ] Lu tlmd !!!je voudrais savoir si c'est possible de retrouver un fichier (.c) à partir d'un fichier (.o) ?Au fait j"ai perdu l'unique copie d'une sour Pb de copie de fichier/taille de structure [ par wannie ] Salut tt le monde. Quelqu'un pourrai tester mon prog est me dire si ça fonctionne. Moi je comprend pas j'ai une copie d'un caractère dans chaque ligne copie automatique de la version précédente [ par plaineR ] Bonjour,Je cherche comment conserver automatiquement la version précédente de mon fichier.Exemple :un utilisateur enregistre un fichier (monfichier.tx copie de fichier (DLL) [ par mariuscesar ] salut j'ai besoin d'un code en C me permettant de copie une DLL dans un répertoire. urgent svp!! je piannote en C (borland) environnement DOS pour cer Obtenir uen icone d'un fichier avec l'api windows, possible? [ par JackosKing ] Bona alors j'ai cherche dans la base de registre et j'ai pas trouvé ou sont stoqué les infos pour avoir les icones des different types de fichiers;(es Copie de fichier en reseau [ par ricky78 ] Bonjour à tous.Je cherche un code en Visual CPP permettant de récupérer le chemin d'un fichier sur un PC en reseau et par la suite le moyen le plus si


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales