Supprimer un fichier en passant par la corbeille en C#. [Résolu]

maxolo 6 Messages postés dimanche 9 octobre 2005Date d'inscription 7 septembre 2007 Dernière intervention - 28 janv. 2006 à 11:43 - Dernière réponse : chouna19 3 Messages postés samedi 1 mars 2008Date d'inscription 9 mai 2010 Dernière intervention
- 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!!!!
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
zebobo5 273 Messages postés dimanche 5 octobre 2003Date d'inscription 6 février 2009 Dernière intervention - 30 janv. 2006 à 11:43
3
Merci
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.

Merci zebobo5 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de zebobo5
maxolo 6 Messages postés dimanche 9 octobre 2005Date d'inscription 7 septembre 2007 Dernière intervention - 31 janv. 2006 à 09:33
0
Merci
Merci
Commenter la réponse de maxolo
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 1 févr. 2006 à 22:05
0
Merci
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#
*/
Commenter la réponse de cs_coq
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 12 févr. 2006 à 14:11
0
Merci
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
Commenter la réponse de cs_mathmax
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 12 févr. 2006 à 14:37
0
Merci
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#
*/
Commenter la réponse de cs_coq
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 12 févr. 2006 à 18:17
0
Merci
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
Commenter la réponse de cs_mathmax
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 12 févr. 2006 à 18:26
0
Merci
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#
*/
Commenter la réponse de cs_coq
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 12 févr. 2006 à 18:41
0
Merci
Salut,
Tu comprendras peut-etre mieux ce qu'est le PInvoke (pour Platform Invoke) en regardant ici



Mx
MVP C#
Commenter la réponse de MorpionMx
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 12 févr. 2006 à 22:34
0
Merci
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
Commenter la réponse de cs_mathmax
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 12 févr. 2006 à 23:08
0
Merci
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#
*/
Commenter la réponse de cs_coq
cs_mathmax 404 Messages postés vendredi 28 octobre 2005Date d'inscription 31 août 2008 Dernière intervention - 12 févr. 2006 à 23:41
0
Merci
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
Commenter la réponse de cs_mathmax
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 13 févr. 2006 à 10:41
0
Merci
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#
*/
Commenter la réponse de cs_coq
chouna19 3 Messages postés samedi 1 mars 2008Date d'inscription 9 mai 2010 Dernière intervention - 19 mars 2010 à 17:41
0
Merci
Re :je veux faire une Suppression simple d' un fichier à travers un serveur ftp en utilisant C#.merci
Commenter la réponse de chouna19

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.