[Résolu] Comment copier un fichier d'un lecteur à un autre
Re: Comment copier un fichier d'un lecteur à un autre
Heu donc tu veux faire un copier / coller quoi...
Tu ne crois pas que "clic droit copié" clic droit coller" irait plus vite.. Je suis sérieux là..
Ou alors tu vends la clé aux "clients" ? Dans ce cas là pourquoi ne lancent ils pas directement le logiciel de la clé..
Faire un "pseudo" installeur pour un soft portable contenant 1 sul fichier (voir un seul dossier) je cherche mais je ne comprends pas l’intérêt là si ce n'est alourdir le programme.
Tu ne crois pas que "clic droit copié" clic droit coller" irait plus vite.. Je suis sérieux là..
Ou alors tu vends la clé aux "clients" ? Dans ce cas là pourquoi ne lancent ils pas directement le logiciel de la clé..
Faire un "pseudo" installeur pour un soft portable contenant 1 sul fichier (voir un seul dossier) je cherche mais je ne comprends pas l’intérêt là si ce n'est alourdir le programme.
~~~~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
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳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
Re: Comment copier un fichier d'un lecteur à un autre
Penser à l'audience: tous les utilisateurs ne sont pas informaticiens et certains viendront (je pense) avec une clé usb pour installer plus tard. Parfois, le simple fait d'ouvrir « l'explorateur » (?) faire copié (?) coller (?) n'est pas évident.
Créer un programme de setup complet est assez difficile. Ça l'est un peu moins avec 7z ou WinRar, mais quand même.
Ces deux derniers savent créer un installeur complet avec pour WinRar même un raccourci sur le bureau.
Pour améliorer le programme, il serait donc bien de faire une icône sur le bureau qui pointera sur le répertoire où est installé le programme.
On peut faire ce raccourci avec une API ou avec la commande Windows mklink
Créer un programme de setup complet est assez difficile. Ça l'est un peu moins avec 7z ou WinRar, mais quand même.
Ces deux derniers savent créer un installeur complet avec pour WinRar même un raccourci sur le bureau.
Pour améliorer le programme, il serait donc bien de faire une icône sur le bureau qui pointera sur le répertoire où est installé le programme.
On peut faire ce raccourci avec une API ou avec la commande Windows mklink
Code : Tout sélectionner
EnableExplicit
Define Program_Title$ = "Diag de piste"
Define Program_EXE$ = "Diagdepiste.exe"
Define Program_Rep$ = "D:\AFD50"
SetCurrentDirectory(GetUserDirectory(#PB_Directory_Desktop))
RunProgram("cmd", "/c mklink " +
#DQUOTE$ +
Program_Title$ +
#DQUOTE$ +
" " +
#DQUOTE$ +
Program_Rep$ +
"\" +
Program_EXE$ +
#DQUOTE$,
"")
End
Dernière modification par Marc56 le mar. 22/janv./2019 17:47, modifié 2 fois.
Re: Comment copier un fichier d'un lecteur à un autre
Je finis pas m'embrouiller, car la manœuvre c'est : je crée bénévolement un logiciel de dépistage du diabète et pour nourrir la base de données, d'autres bénévoles vont là où on rencontre les gens, c'est à dire sur les foires et les marchés et pour saisir les données ils ont chacun un laptop sur lequel je souhaite créer un logiciel pour installer le logiciel de dépistage dessus et pour cela, je veux mettre le logiciel installeur, le logiciel de dépistage qui se lancera en cliquant sur une icône, les bases de données de chacun seront sur une clé individuelle et seront regroupées en une seule base dans l'ordinateur principal.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment copier un fichier d'un lecteur à un autre
Si tu mets ton logiciel et l'installateur du logiciel de dépistage au même endroit (sur la clef), tu peux utiliser le chemin de ton logiciel, plutôt que d'essayer de chercher le chemin de la clef...
https://www.purebasic.com/documentation ... ename.html
https://www.purebasic.com/documentation ... ename.html
Re: Comment copier un fichier d'un lecteur à un autre
Sous window, un programme s'installe dans... Programme (Et si vous prettez une attention tout particulière, vous pouvez identifier une subtile resemblence entre programme et programme). Pour obtenir le dossier programme, il existe les variable d'environement :
(Pour avoir les droits d'écriture dans le dossier programme, il faut demander les droits administrateur à l'utilisateur.)
Il est conseillé de donner le choix à l'utilisateur de choisir où installer son programme (si c'est un débil qui se prend pour un informaticien libre à lui), pour ça effictivement un pathrequester fait le boulot.
Mais en fait, tu n'as que ton exe à "installer" ? Pourquoi tu ne dit pas simplement "Tiens copi l'exe Ton_App.exe et ça marchera" ?
Code : Tout sélectionner
Define ProgramFiles$ = Space(#MAX_PATH)
GetEnvironmentVariable_("PROGRAMFILES", ProgramFiles$, #MAX_PATH)
Debug ProgramFiles$
Il est conseillé de donner le choix à l'utilisateur de choisir où installer son programme (si c'est un débil qui se prend pour un informaticien libre à lui), pour ça effictivement un pathrequester fait le boulot.
Mais en fait, tu n'as que ton exe à "installer" ? Pourquoi tu ne dit pas simplement "Tiens copi l'exe Ton_App.exe et ça marchera" ?
Re: Comment copier un fichier d'un lecteur à un autre
Pas besoin d'API GetEnvironmentVariable() existe nativement en PB. D'ailleurs tous les langages de programmation ont des fonctions pour lire et définir les variables d'environnement puisque c'est indispensable notamment au chainage de programmes (ex: un batch qui lance un exécutable pour redéfinir avant un autre environnement temporaire)
Donc une seule ligne:
Et pour un programme simple ne comportant qu'un seul EXE, il est plus simple de l'installer dans un sous-dossier de "Mes Documents" (lui aussi accessible avec les fonctions natives de PB GetUserDirectory(). Ainsi pas besoin d'avoir de droits d'admin et le programme et ses données seront sauvegardées par tout système de backup utilisateur.
Donc une seule ligne:
Code : Tout sélectionner
Debug GetEnvironmentVariable("ProgramFiles")
Code : Tout sélectionner
Debug GetUserDirectory(#PB_Directory_Documents)
Re: Comment copier un fichier d'un lecteur à un autre
Bonjour à tous,
même codé en dur, ça ne fonctionne pas :
Si la copie ne s'effectue pas, je supprime le répertoire afin de pouvoir le recréer à la prochaine tentative.
Je n'oublie de vous remercier.
même codé en dur, ça ne fonctionne pas :
Code : Tout sélectionner
Procedure.s Detecter_Cle_USB()
Define Lecteur.s
For I = 0 To 25
Lecteur = Chr(65 + I) + ":"
ID = ExamineDirectory(#PB_Any, Lecteur, "*")
If ID
If GetDriveType_(Lecteur) = #DRIVE_REMOVABLE
Break
EndIf
FinishDirectory(ID)
EndIf
Next
ProcedureReturn Lecteur
EndProcedure
Procedure Copier_Repertoire()
;pour protéger mon SSD, je le crée sur le D: à modifier pour la version finale
Select EventType()
Case #PB_EventType_LeftClick
RepertoireSource$ = Detecter_Cle_USB()
If FileSize(RepertoireDestination$) <> -2
If CreateDirectory("D:\AFD50")
MessageRequester("Succès", "Répertoire " + RepertoireDestination$ + " créé")
Else
MessageRequester("Erreur", "Impossible de créer " + RepertoireDestination$)
End
EndIf
SetCurrentDirectory(RepertoireSource$)
Debug GetCurrentDirectory()
If CopyFile("Diagdepiste.exe", "D:\AFD50\Diagdepiste.exe")
MessageRequester("Succès", "Programme installé.")
Else
MessageRequester("Erreur", "Programme non copié.")
DeleteDirectory("D:\AFD50", "*.*", #PB_FileSystem_Force)
EndIf
EndIf
EndSelect
EndProcedure
Je n'oublie de vous remercier.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: Comment copier un fichier d'un lecteur à un autre
Bonjour Micoute,
Tu n'as pas besoin de déterminer la lettre du lecteur USB puisque ton programme sera lancé depuis le lecteur lui-même. Donc pour mettre au point ton programme, tu dois le compiler, mettre l'EXE sur la clé et lancer cet exe.
Ou
Tu peux copier ton fichier source (.pb) sur la clé (de test) puis paramétrer les options du compilateur pour "Créer l’exécutable temporaire dans le répertoire des sources"
PS. Avec SetCurrentDirectory("C:") ne pas oublier l'antislash ('\') sinon, on change de disque mais pas de répertoire et c'est le dernier répertoire utilisé par chaque disque qui est utilisé.
Code corrigé: Tu avais mal imbriqué If/EndIf pour If FileSize(Repertoire) <> -2 rien ne se passait si le répertoire de destination existait déjà.
Beaucoup de code en trop aussi: pas besoin de tester le bouton gauche puisque c'est le bouton par défaut.
Tu n'as pas besoin de déterminer la lettre du lecteur USB puisque ton programme sera lancé depuis le lecteur lui-même. Donc pour mettre au point ton programme, tu dois le compiler, mettre l'EXE sur la clé et lancer cet exe.
Ou
Tu peux copier ton fichier source (.pb) sur la clé (de test) puis paramétrer les options du compilateur pour "Créer l’exécutable temporaire dans le répertoire des sources"
PS. Avec SetCurrentDirectory("C:") ne pas oublier l'antislash ('\') sinon, on change de disque mais pas de répertoire et c'est le dernier répertoire utilisé par chaque disque qui est utilisé.
Code corrigé: Tu avais mal imbriqué If/EndIf pour If FileSize(Repertoire) <> -2 rien ne se passait si le répertoire de destination existait déjà.
Beaucoup de code en trop aussi: pas besoin de tester le bouton gauche puisque c'est le bouton par défaut.
Code : Tout sélectionner
;XIncludeFile "D:\Programmation\Prg Perso\M\Modules\MesGadgets.pb"
;UseModule MesGadgets
Enumeration
#Fenetre_principale
EndEnumeration
Enumeration Gadgets
#Image
#Txt_Installe
#Btn_Install_Diag
#Btn_Quitter
EndEnumeration
Enumeration Polices
#Arial20
#Segoe30
EndEnumeration
Enumeration Images
#ID_Image
EndEnumeration
; UsePNGImageDecoder()
; Global ID, Lecteur.s = "", MaCle.s = "", Repertoire.s = "", Fichier.s = "Diagdepiste.exe", fichierSource$ = "", fichierCible$ = ""
Global Fichier.s = "Diagdepiste.exe"
Global Repertoire.s = "D:\AFD50"
Procedure Copier_Repertoire()
If FileSize(Repertoire) <> -2
Debug "Le répertoire de destination n'existe pas."
If CreateDirectory(Repertoire)
MessageRequester("Succès", "Répertoire: " +
Repertoire + " créé.")
Else
MessageRequester("Erreur", "Impossible de créer le répertoire: " +
Repertoire)
End
EndIf
EndIf
Debug "Répertoire courant: " + GetCurrentDirectory()
If CopyFile(Fichier, Repertoire + "\" + Fichier)
MessageRequester("Succès", "Programme installé.")
Else
MessageRequester("Erreur", "Programme non copié.")
DeleteDirectory(Repertoire, "*.*", #PB_FileSystem_Force)
EndIf
EndProcedure
OpenWindow(#Fenetre_principale, 450, 200, 400, 400, "Installeur", #PB_Window_BorderLess|#PB_Window_ScreenCentered)
TextGadget(#Txt_Installe, 10, 10, 380, 40, "Programme d'installation", #PB_Text_Center)
ButtonGadget(#Btn_Install_Diag, 10, 80, 380, 40, "Installer DiagDepiste")
ButtonGadget(#Btn_Quitter, 95, 340, 210, 50, "Q U I T T E R")
LoadFont(#Arial20, "Arial Black", 20, #PB_Font_Bold|#PB_Font_HighQuality)
LoadFont(#Segoe30, "Segoe UI", 20, #PB_Font_Bold|#PB_Font_HighQuality)
SetGadgetFont(#Txt_Installe, FontID(#Segoe30))
SetGadgetFont(#Btn_Install_Diag, FontID(#Arial20))
SetGadgetFont(#Btn_Quitter, FontID(#Arial20))
SetWindowColor(#Fenetre_principale, $FEC0BE)
SetGadgetColor(#Txt_Installe, #PB_Gadget_BackColor, GetWindowColor(#Fenetre_principale))
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Btn_Quitter
End
Case #Btn_Install_Diag
Copier_Repertoire()
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
DataSection
;debut:
;IncludeBinary "D:\Programmation\Prg Perso\A\AFD50\Projet commun\DiabDepiste\Logo 50_AFD.png"
;fin:
EndDataSection
[Résolu] Comment copier un fichier d'un lecteur à un autre
Merci beaucoup Marc56,
j'avais déjà trouvé la solution grâce à ton aide en particulier, car tu as compris ce que je voulais faire et je m'aperçois que ton code est plus court pour arriver au même résultat, alors je te remercie une fois de plus.
je teste le bouton gauche, car j'utilise un module qui me contraint à le faire, car l'opération se déclenche quand la souris passe sur le gadget et c'est juste une protection pour l'action soit volontaire.
Pour la boucle j'avais remarqué aussi, et si la copie ne se s'effectuait pas, j'effaçais le répertoire que je venais de créer, car sur les laptops finaux, le répertoire ne peut pas déjà exister.
j'avais déjà trouvé la solution grâce à ton aide en particulier, car tu as compris ce que je voulais faire et je m'aperçois que ton code est plus court pour arriver au même résultat, alors je te remercie une fois de plus.
je teste le bouton gauche, car j'utilise un module qui me contraint à le faire, car l'opération se déclenche quand la souris passe sur le gadget et c'est juste une protection pour l'action soit volontaire.
Pour la boucle j'avais remarqué aussi, et si la copie ne se s'effectuait pas, j'effaçais le répertoire que je venais de créer, car sur les laptops finaux, le répertoire ne peut pas déjà exister.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !