Copie de fichier via l'API

Résolu
cs_syl2 Messages postés 49 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2005 - 21 déc. 2004 à 18:54
cs_syl2 Messages postés 49 Date d'inscription lundi 19 mai 2003 Statut Membre 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

2 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 déc. 2004 à 19:15
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#
3
cs_syl2 Messages postés 49 Date d'inscription lundi 19 mai 2003 Statut Membre Dernière intervention 7 juillet 2005 1
21 déc. 2004 à 20:48
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
0
Rejoignez-nous