Page 1 sur 2

Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 27/mars/2011 17:53
par GeBonet
Bonjour à tous,
Je ne sais pas si cela à déjà présenté ICI, mais ça existe sur le forum Russe !
Aussi je vous le propose, cela peut toujours être utile...
Le voilà à vous de voir. :)

Code : Tout sélectionner

; ------------------------------------------
; Envois un fichier dans la poubelle !!! 
; Avec demande confirmation !
; ------------------------------------------
#FOF_NOERRORUI=$400
;
Procedure RecycleFile(file$)
  m=AllocateMemory(Len(file$)+2)
  If m
    PokeS(m,file$) 
    SHFileOp.SHFILEOPSTRUCT 
    SHFileOp\pFrom=m 
    SHFileOp\wFunc=#FO_DELETE
    SHFileOp\fFlags=#FOF_ALLOWUNDO|#FOF_NOERRORUI 
    ok=SHFileOperation_(SHFileOp) ; Si vous voulez voir cette fonction (F1)
    ;                               n'oubliez pas de ragarder aussi "SHFILEOPSTRUCT" 
    FreeMemory(m)
    If ok=0 : ok=1 : Else : ok=0 : EndIf
  EndIf
  ProcedureReturn ok
EndProcedure
LeFichier$="c:\bytes.txt"         ; <<=== Le fichier à expédier à la poubelle ! 
Debug RecycleFile(LeFichier$) 
; ---------------------------
A++
Gerhard

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 27/mars/2011 18:42
par falsam
En plus court

Code : Tout sélectionner

Procedure RecycleFile(file$)
  SHFileOp.SHFILEOPSTRUCT
  SHFileOp\pFrom=@file$
  SHFileOp\wFunc=#FO_DELETE
  SHFileOp\fFlags=#FOF_ALLOWUNDO
  SHFileOperation_(SHFileOp)
EndProcedure

RecycleFile("VotreFichier")

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 27/mars/2011 18:51
par Jacobus
Et pour la vider...

Code : Tout sélectionner

Procedure EmptyTrash(confirm) 
  ;confirm = 1 > vide la corbeille avec confirmation
  ;confirm = 0 > vide la corbeille sans confirmation
  If OpenLibrary(0,"shell32.dll") And GetFunction(0,"SHEmptyRecycleBinA") 
    CallFunction(0,"SHEmptyRecycleBinA",0,0,1-confirm) 
    CloseLibrary(0) 
  EndIf 
EndProcedure

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 27/mars/2011 20:27
par venom
sympa vos code ça peut servir.
Merci :)






@++

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 27/mars/2011 21:31
par Ar-S
Je n'utilise pas la corbeille mais ces codes peuvent servir, merci ;)

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 27/mars/2011 21:32
par GeBonet
Ben voilà...
Comme quoi quand on lance une ligne à l'eau c'est souvent pour pêcher quelques chose :D
Ici, elle aura été bonne :lol:
Merci.

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 18/janv./2015 11:23
par NY152
Je voulais voir ce que ce petit programme donnait mais y a tellement de changements à y apporter pour le rendre compatible avec la dernière version de PB que j'abandonne .... :(

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 18/janv./2015 11:48
par falsam
Deux procédures pour supprimer un fichier et vider une poubelle

RecycleFile(file.s) : Envoyer un fichier à la poubelle.

EmptyTrash(confirm) : Envoyer un fichier à la poubelle avec confirmation (Confirm = 1) ou pas (Confirm = 0).

■ Le code

Code : Tout sélectionner

;Envoyer un fichier vers la poubelle
Procedure RecycleFile(file.s)
  SHFileOp.SHFILEOPSTRUCT
  SHFileOp\pFrom=@file
  SHFileOp\wFunc=#FO_DELETE
  SHFileOp\fFlags=#FOF_ALLOWUNDO ;(#FOF_NOCONFIRMATION)   
  SHFileOperation_(SHFileOp)
EndProcedure

;Vider la poubelle avec confirmation ou pas
Procedure EmptyTrash(confirm) 
  ;confirm = 1 > vide la corbeille avec confirmation
  ;confirm = 0 > vide la corbeille sans confirmation
  
  If OpenLibrary(0,"shell32.dll") And GetFunction(0,"SHEmptyRecycleBinA") 
    CallFunction(0,"SHEmptyRecycleBinA",0,0,1-confirm) 
    CloseLibrary(0) 
  EndIf 
EndProcedure

;RecycleFile("VotreFichier")

;EmptyTrash(0)
Testé sous PB 5.30 et PB 5.31

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : sam. 10/mars/2018 21:02
par Bryce
Bonjour,
Ca ne marche absolument pas.
A chaque compilation j'ai "Structure introuvable SHFILEOPSTRUCT"
Merci pour votre aide et la mise à jour car je crois que ces pages ont oublié d'être retirés malgré leur obsolescence.
Bonne soirée

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : sam. 10/mars/2018 22:00
par Zorro
regarde ici
http://forums.purebasic.com/english/vie ... =12&t=3783&

en principe la structure avec Purebasic 5.62 , est declarée

mais si tu utilises une Version plus ancienne
voici la structure a mettre au debut du listing

Code : Tout sélectionner

Structure SHFILEOPSTRUCT
	hwnd.i
	wFunc.l
	*pFrom
	*pTo
	fFlags.w
	fAnyOperationsAborted.l
	*hNameMappings
	*lpszProgressTitle
EndStructure


Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 11/mars/2018 15:09
par Marc56
Bryce a écrit :Bonjour,
Ca ne marche absolument pas.
A chaque compilation j'ai "Structure introuvable SHFILEOPSTRUCT"
Merci pour votre aide et la mise à jour car je crois que ces pages ont oublié d'être retirés malgré leur obsolescence.
Bonne soirée
Ce site est un forums et pas la documentation en ligne. Aucun article n'est donc retiré car des informations peuvent être encore utiles aux utilisateurs d'anciennes versions.
L'article initial date de 2011... le Windows du moment était Vista. Windows ne gère plus la corbeille de la même manière.
Comme la version de PB actuelle essaye d'assurer une compatibilité depuis XP, il faudrait donc une fonction gérant plusieurs manières d'envoyer vers la corbeille.
Comme cette fonctionnalité est assez peu demandée mais risquerait d'ajouter du poids, du cpu et donc des bugs à la fonction DeleteFile(), il y a peu de chance pour que ce soit implémenté dans une prochaine versions.

:wink:

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 11/mars/2018 18:30
par Zorro
Je viens de tester le Code posté par Falsam
sous windows 10 et Purebasic 5.62 (version complete) , il marche tres bien

bien sur ce code faisant appel a L'Api windows, il ne marchera pas avec une version DEMO de Purebasic ... :wink:

revoici le code

Code : Tout sélectionner

Declare recyclefile(file.s)
Declare emptytrash(confirm)


file_effacer.s=OpenFileRequester("chosir un fichier a mettre dans la corbeille","c:\","*.*",0)
 

RecycleFile(file_effacer.s)

;EmptyTrash(0) 

MessageRequester("info" ,"le fichier :"+file_effacer.s+chr(10)+"a été mis dans la corbeille")


;Envoyer un fichier vers la poubelle
Procedure RecycleFile(file.s)
  SHFileOp.SHFILEOPSTRUCT
  SHFileOp\pFrom=@file
  SHFileOp\wFunc=#FO_DELETE
  SHFileOp\fFlags=#FOF_ALLOWUNDO ;(#FOF_NOCONFIRMATION)   
  SHFileOperation_(SHFileOp)
EndProcedure

;Vider la poubelle avec confirmation ou pas
Procedure EmptyTrash(confirm)
  ;confirm = 1 > vide la corbeille avec confirmation
  ;confirm = 0 > vide la corbeille sans confirmation
 
  If OpenLibrary(0,"shell32.dll") And GetFunction(0,"SHEmptyRecycleBinA")
    CallFunction(0,"SHEmptyRecycleBinA",0,0,1-confirm)
    CloseLibrary(0)
  EndIf
EndProcedure

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 11/mars/2018 19:37
par Bryce
Ha ben voilà le problème alors, j'ai une version démo vu que je tape mon tout premier programme en PureBasic et que je test ce langage pour voir s'il est bien. Je ne vais pas acheter un produit sans savoir s'il m'apporte toute satisfaction et du coup c'est mal barré pour un tout premier programme qui était censé virer certains fichiers. Je suis du coup extrêmement déçu de ne pas pouvoir faire une chose aussi simple de mettre un fichier dans la corbeille.
Merci quand même pour votre aide à tous dans ce test peu fructueux au final... :(

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 11/mars/2018 20:03
par Ar-S
Salut,
Bah PB est cross plateforme, donc un truc spécifique à Windows utilise les API. C'est aussi simple que ça. Et l'utilisation des API n'est pas inclues dans la démo..
Donc ne blâme pas PB... On te confirme que ça fonctionne et on te file les codes.
(Perso je ne vois pas l’intérêt de passer par la corbeille mais ses besoins.)

Vu le Prix de la licence PB à vie, je crois que tu fais tout de même la fine bouche et que tu te priverais d'un langage puissant.
Après je ne sais pas vers quels genre de soft tu comptes t'orienter. Tu pourrais nous en dire plus afin de confirmer ou d'infirmer que PB est adapté à tes besoins.
Il existe bon nombre d'applications que tu peux tester dans "annonce" qui sont abouties.
P.S : "virer des fichiers" c'est utiliser Delefile().. Les mettre à la corbeille c'est les déplacer dans la corbeille.

Re: Envois d'un fichier à directement à la poubelle !!!

Publié : dim. 11/mars/2018 21:05
par Bryce
Voici un contournement qui permet de mettre facilement dans la corbeille via une commande tiers. Je la donne pour info à ceux qui voudraient mettre facilement un fichier dans la corbeille ou qui ont une version démo.

Prérequis au choix, une deux deux solutions :

- Télécharger recycle-v0.2.exe sur https://github.com/kizzx2/cmd-recycle/downloads
à renommer recycle.exe et le mettre dans le dossier windows si on veut l'appeler facilement de partout.
ou
- Installer le célèbre NirCmd via http://www.nirsoft.net/utils/nircmd.html
à mettre aussi dans le dossier Windows (3 fichiers, nircmd.chm, nircmd.exe et nircmdc.exe)

Donc ensuite, et voilà qui devient facile, on lance sur PureBasic la commande suivante :

pour recycle :

Code : Tout sélectionner

RunProgram("recycle.exe","chemin/monfichier","")
pour nircmd :

Code : Tout sélectionner

RunProgram("nircmd.exe","moverecyclebin chemin/monfichier","")
Facile et réalisable ensuite en une seule ligne dans PureBasic.
Voilà pour ceux que çà intéresse.
Bonne continuation.