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

cs_syl2 49 Messages postés lundi 19 mai 2003Date d'inscription 7 juillet 2005 Dernière intervention - 21 déc. 2004 à 18:54 - Dernière réponse : cs_syl2 49 Messages postés lundi 19 mai 2003Date d'inscription 7 juillet 2005 Dernière intervention
- 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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 21 déc. 2004 à 19:15
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#

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_syl2 49 Messages postés lundi 19 mai 2003Date d'inscription 7 juillet 2005 Dernière intervention - 21 déc. 2004 à 20:48
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.