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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

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

Message 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
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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")
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Jacobus
Messages : 1520
Inscription : mar. 06/avr./2004 10:35
Contact :

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

Message 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
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

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

Message par venom »

sympa vos code ça peut servir.
Merci :)






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message par Ar-S »

Je n'utilise pas la corbeille mais ces codes peuvent servir, merci ;)
Dernière modification par Ar-S le dim. 27/mars/2011 21:33, modifié 1 fois.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
GeBonet
Messages : 453
Inscription : ven. 29/févr./2008 16:17
Localisation : Belgique

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

Message 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.
Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
NY152
Messages : 148
Inscription : dim. 14/mai/2006 20:41

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

Message 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 .... :(
.:NY152:.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Bryce
Messages : 5
Inscription : sam. 10/mars/2018 19:02

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

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

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

Message 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

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

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

Message 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
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Bryce
Messages : 5
Inscription : sam. 10/mars/2018 19:02

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

Message 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... :(
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Bryce
Messages : 5
Inscription : sam. 10/mars/2018 19:02

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

Message 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.
Répondre