Copie de fichier via l'API [Résolu]

Messages postés
49
Date d'inscription
lundi 19 mai 2003
Dernière intervention
7 juillet 2005
- - Dernière réponse : cs_syl2
Messages postés
49
Date d'inscription
lundi 19 mai 2003
Dernière intervention
7 juillet 2005
- 21 déc. 2004 à 20:48
Bonjour,

Au sein de mon application, j'offre à l'utilisateur la possibilité d'importer des fichiers XML. Le fichier qui va être importé peut déjà exister dans mon dossier contenant l'exe de l'application. Ainsi, j'ai donc choisi d'utiliser l'API Windows pour copier des fichiers, avoir la fenêtre de demande de confirmation en cas d'existence du fichier à copier ...

Le code ci dessous fonctionne mais il y a quelque chose que je n'arrive pas à faire :

Quand je copie le fichier toto du dossier1 dans le dossier2, si le fichier toto existe déjà, je vais avoir la fenêtre de confirmation de remplacement comme celle de Windows ... mais que je cliques sur Oui je veux remplacer ou Non je ne veux pas remplacer, la copie s'effectue quand même ... ce qui pose bien évidemment un problème.

Le code de sotie de fonction n'est quand à lui pas le même : 0 si je clique sur oui je veux remplacer, 7 si j'ai cliquer sur non.

J'aimerais donc pouvoir faire que si je clique sur Non, cela ne copie pas le fichier ...

Merci par avance à tous ceux qui pourront m'éclairer

using System;
using System.IO;
using System.Runtime.InteropServices;

public class Files{

public enum FO : int
{

FO_COPY = 2,
FO_DELETE = 3,
FO_MOVE = 1,
FO_RENAME=4,
FOF_CONFIRMMOUSE = 0x2,
FOF_ALLOWUNDO = 0x40,
FOF_FILESONLY = 0x80,
FOF_MULTIDESTFILES = 0x1,
FOF_NOCONFIRMATION = 0x10, //Don't prompt the user.;
FOF_NOCONFIRMMKDIR = 0x200,
FOF_NO_CONNECTED_ELEMENTS = 0x1000,
FOF_NOCOPYSECURITYATTRIBS = 0x800,
FOF_NOERRORUI = 0x0400,
FOF_RENAMEONCOLLISION = 0x8,
FOF_SILENT = 0x4,
FOF_SIMPLEPROGRESS = 0x100,
FOF_WANTMAPPINGHANDLE = 0x20,
FOF_WANTNUKEWARNING = 0x2000,
FOF_NORECURSION = 0x1000
}

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto, Pack=1)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
public int wFunc;
public string pFrom;
public string pTo;
public short fFlags;
public long fAnyOperationsAborted;
public long hNameMappings;
public string lpszProgressTitle;
}
[DllImport("shell32.dll", CharSet=CharSet.Auto)]
public static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);
public void CopyFile(string pFrom, string pTo)
{
long retval;
SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT();
shf.wFunc = (int)FO.FO_COPY;
shf.fFlags = (int)FO.FOF_ALLOWUNDO;
shf.pFrom = pFrom+'\0'+'\0';
shf.pTo = pTo + '\0' + '\0';
Console.WriteLine(shf.fAnyOperationsAborted.ToString());
retval = SHFileOperation(ref shf);
if (retval != 0)
Console.WriteLine(retval + "Move Operation Failed");
else if (shf.fAnyOperationsAborted!=0)
Console.WriteLine(shf.fAnyOperationsAborted + "Operation Aborted");
Console.WriteLine(retval);
}
}

Ps : c normal que je ne puisse pas mettre mon code sur fond grisé ?

Slyv
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
88
3
Merci
ben normalement tu peux mettre le fond gris avec la balise [*Code][*/Code] (sans les *)

sinon j'ai essayer ton code et quand je repond non il ne fait pas la copie

Cocoricoooooooo !!!!
coq
MVP Visual C#

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_coq
Messages postés
49
Date d'inscription
lundi 19 mai 2003
Dernière intervention
7 juillet 2005
0
Merci
Salut le coq,

ok pour les balides, quand je clique sur le bouton ça donne rien, c'est pour ça ^^ je le saurais pour la prochaine fois !!!

Quand à l'API, ben merci de m'avoir fait remarqué que j'étais bête !!!!

Parce que en faite voilà ce que faisais mon code :

testcopie = files.CopyFile(openFileName.ToString(),exedir+"\"+name);
if(copie==0)
{
...
}
this.planningDS.ReadXml(openFileName.ToString());

donc forcément que ça changeais dans mon dataset ^^ (alors que j'attendais le contraire)

Merci mille fois, lol.

Slyv
Commenter la réponse de cs_syl2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.