Supprimer un fichier en passant par la corbeille en C#.

Résolu
maxolo Messages postés 6 Date d'inscription dimanche 9 octobre 2005 Statut Membre Dernière intervention 7 septembre 2007 - 28 janv. 2006 à 11:43
chouna19 Messages postés 3 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 9 mai 2010 - 19 mars 2010 à 17:41
Bonjour, je voudrais savoir commment supprimer un fichier (je sais comment le supprimer définitivement) en le passant dans la corbeille.

En fait j'ai essayé delete mais ca supprime définitivement.
Ensuite, j'ai essayé de faire un move dans le dossier caché RECYCLER\122628682-2675-001-1003 par exemple (dossier qui existe dans chaque partition et qui sert à mettre les fichiers supprimé dans la corbeille).
Ca fonctionne : le fichier n'existe plus dans le dossier source. Mais le probleme c'est qu'il n'est pas présent dans le dossier de la corbeille. En fait, il agit comme un delete...

Voila, donc je voudrais savoir comment mettre un fichier dans la corbeille (le supprimer mais pas définitivement).

J'ai besoin d'un code en C#.

Merci d'avance pour votre aide!!!!

13 réponses

zebobo5 Messages postés 273 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 6 février 2009 1
30 janv. 2006 à 11:43
Salut,

utilise l'API SHFileOperation de shell32.dll, c'est le seul moyen que je connaisse.

<hr>ZeBobo5
N'oubliez pas de cloturer votre post.
3
maxolo Messages postés 6 Date d'inscription dimanche 9 octobre 2005 Statut Membre Dernière intervention 7 septembre 2007
31 janv. 2006 à 09:33
Merci
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
1 févr. 2006 à 22:05
Salut,

J'ai poster le bout de code que j'avais écrit il y a quelques temps, des fois que ça puisse être utile : MANIPULATION DE LA CORBEILLE (SUPPRESSION, INFORMATIONS, VIDAGE)

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
12 févr. 2006 à 14:11
Bonjour,

Il m'intéresse aussi de pouvoir envoyer un fichier à la corbeille. Je ne trouve pas la dll shell32.dll. Une fois que je l'ai ajouté, SHFileOperation sera t-il directement reconnu ? En fait qu'est ce qu'une API.

J'ai téléchargé le code de coq, mais c'est un programme un peut trop complet pour moi. J'ai juste besoin de pouvoir supprimer un fichier en l'envoyant vers la corbeille.

merci

Mathmax
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
12 févr. 2006 à 14:37
Salut,

On parle ici de l'API Win32.
shell32.dll n'est pas une assembly managé mais une dll native faisant partie du système. (tu la trouvera dans le répertoire %SystemRoot%\system32)

Tu trouveras l'appel dans la méthode MoveFileToRB, dans le fichier RecycleBin.cs

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
12 févr. 2006 à 18:17
Quand tu dis "l'appel dans la méthode MoveFileToRB, dans le fichier RecycleBin.cs", tu veux dire dans ton programme ? J'ai en effet trouvé cette fonction dans ton programme, mais si je veux copier dans le mien toute la class RecycleBin il faut assi que je charge RecycleBinMoveResult. Ca fais un peu beaucoup pour un envoyer un fichier à la corbeille. Il y a surement dans ces class des chôses dont je n'ai pas besoin.
Sinon j'ai ajouté la référence shell32, mais ça ne me donne visiblement pas le droit à SHFileOperation (n'est pas reconnu).Que dois-je faire après avoir chargé cette dll ?

Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
12 févr. 2006 à 18:26
J'ai parler de regarder le code de la méthode et non pas de la prendre.
=> "Tu trouveras l'appel [de SHFileOperation] dans la méthode MoveFileToRB, dans le fichier RecycleBin.cs"

Je ne parlais pas d'ajouter shell32.dll en référence pour que VS génère un wrapper, mais d'utiliser le mécanisme de PInvoke.

/*
coq
MVP Visual C#
*/
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
12 févr. 2006 à 18:41
Salut,
Tu comprendras peut-etre mieux ce qu'est le PInvoke (pour Platform Invoke) en regardant ici



Mx
MVP C#
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
12 févr. 2006 à 22:34
J'ai essayé de déclarer la méthode SHFileOperation() de la dll shell32.dll en tapant, comme indiqué dans le lien de MorpionMx :


class
RemoveToRecycleBin
{
[
DllImport(
"shell32.dll")]

public
static
extern
int SHFileOperation();
}

Puis quand je tape :



RemoveToRecycleBin.SHFileOperation(MonFichierASupprimer);

..ça ne marche pas.

En fait je vois pas trop quels sont les arguments de SHFileOperation().

Pourriez-vous m'expliquer ce qui ne va pas ?

merci d'avance

Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
12 févr. 2006 à 23:08
o_O

Vu la définition que tu lui as donner, elle n'a pas de paramètre alors ça va être dûr de lui en passer.

J'ai passer direct le chemin du fichier dans mon exemple ?

La /library/en-us/shellcc/platform/shell/reference/functions/shfileoperation.asp doc de la méthode SHFileOperation le dit : la fonction attend un pointeur vers une instance de la structure SHFILEOPSTRUCT, qu'on initilise pour dire à la méthode ce qu'elle doit faire :

// initialisation de la structure
RecycleBinWin32.SHFILEOPSTRUCT fileOp = new RecycleBinWin32.SHFILEOPSTRUCT();
fileOp.wFunc = RecycleBinWin32.FILEOP.FO_DELETE;
fileOp.fFlags = RecycleBinWin32.FILEOP_FLAGS.FOF_ALLOWUNDO
| RecycleBinWin32.FILEOP_FLAGS.FOF_NOCONFIRMATION
| RecycleBinWin32.FILEOP_FLAGS.FOF_NOCONFIRMMKDIR
| RecycleBinWin32.FILEOP_FLAGS.FOF_NOERRORUI
| RecycleBinWin32.FILEOP_FLAGS.FOF_SILENT
;
fileOp.pFrom = filePath;

// appel de la méthode
int ret = RecycleBinWin32.SHFileOperation(ref fileOp);
...

/*
coq
MVP Visual C#
*/
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
12 févr. 2006 à 23:41
Je ne comprends pas. J'ai définis la srucure comme il est indiqué là : SHFILEOPSTRUCT, je l'ai initialisé comme tu me l'as dit, l'ai fais l'appel à la méthode SHFileOperation dont j'ai modifier la définition...et pourtant ça marche toujours pas. En clair ça donne ça :


class
RemoveToRecycleBin
{
[DllImport("shell32.dll")]
public static extern int SHFileOperation( SHFILEOPSTRUCT lpFileOp);
}


public struct SHFILEOPSTRUCT {
HWND hwnd;
UINT wFunc;
LPCTSTR pFrom;
LPCTSTR pTo;
FILEOP_FLAGS fFlags;
BOOL fAnyOperationsAborted;
LPVOID hNameMappings;
LPCTSTR lpszProgressTitle;

}

mais il ne reconnait pas tous ces derniers attributs.

Je dois avouer que sur ce coup là C# me déçois. Ca me parait tellement compliqué de faire une chose aussi élémentaire que d'envoyer un fichier à la corbeille...


Mathmax
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 févr. 2006 à 10:41
Ouch !
On ne peut pas directement utiliser les définitions C/C++, c'est d'ailleurs clair quand on regarde la page dont Mx à donner le lien......

Un petit indice : mon exemple fonctionne, donc c'est qu'il contient les bonnes définitions.

/*
coq
MVP Visual C#
*/
0
chouna19 Messages postés 3 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 9 mai 2010
19 mars 2010 à 17:41
Re :je veux faire une Suppression simple d' un fichier à travers un serveur ftp en utilisant C#.merci
0
Rejoignez-nous