begin process at 2012 02 07 08:40:39
  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 :2 674

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 WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
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

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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 : 3,058 sec (3)

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