Mon premier programme : TiCreateFile
Publié : jeu. 19/janv./2012 0:28
Bonsoir,
Lorsque j'ai découvert PureBasic, j'avais commencé par écrire un programme permettant de créer des fichiers de taille voulu. J'ai arrêté PureBasic et je n'ai jamais fini ce programme. J'avais commencé ici : http://www.purebasic.fr/french/viewtopi ... =1&t=11660.
J'ai repris dernièrement le developpement de ce programme et j'aurais voulu avoir vos avis ainsi que vos suggestions.
Le programme est basique : on choisit la taille du fichier que l'on veut créer, son chemin et le programme le génère.
J'ai mis une limite de taille dans le cas ou l'unité est le Mo mais je n'en ai pas encore mis sur les autres alors je vous conseille d'éviter de rentrer des valeurs énorme (enfin, c'est vous qui voyez
). D'ailleurs au dessus d'une certaine taille, le programme est si occupé que la fenêtre se fige ("... ne répond pas…").
Toute suggestion m'intéresse, que ce soit pour l'interface, la technique utilisée ou quoi que ce soit d'autre.
Merci,
TitraxX
Lorsque j'ai découvert PureBasic, j'avais commencé par écrire un programme permettant de créer des fichiers de taille voulu. J'ai arrêté PureBasic et je n'ai jamais fini ce programme. J'avais commencé ici : http://www.purebasic.fr/french/viewtopi ... =1&t=11660.
J'ai repris dernièrement le developpement de ce programme et j'aurais voulu avoir vos avis ainsi que vos suggestions.
Le programme est basique : on choisit la taille du fichier que l'on veut créer, son chemin et le programme le génère.
J'ai mis une limite de taille dans le cas ou l'unité est le Mo mais je n'en ai pas encore mis sur les autres alors je vous conseille d'éviter de rentrer des valeurs énorme (enfin, c'est vous qui voyez

Toute suggestion m'intéresse, que ce soit pour l'interface, la technique utilisée ou quoi que ce soit d'autre.
Merci,
TitraxX
Code : Tout sélectionner
;######################################
; programme : TiCreateFile
; version : 0.0
; description : programme qui permet de créer un fichier de taille souhaité
; détails :
; ajouts prévus :
; auteur : titraxx
; date création : 08/01/2012
; dernière mise à jour: 18/01/2012
;######################################
;---- Variables ----
Global cheminFichierDefaut$ = GetPathPart(ProgramFilename()) + "bin" ;le chemin par défaut du fichier, avec le nom de fichier "bin"
;il faut activer une option pour gérer le dossier de démarrage : Compilateur/Options/compiler-éxecuter et cocher executable dans rep source
Debug "chemin par défaut: " + cheminFichierDefaut$
Global cheminFichierChoisi$ = ""
Debug cheminFichierChoisi$
;---- Énumérations----
Enumeration
#fichier
EndEnumeration
;---- Déclaration des Procédures ----
Declare bouton_parcourir()
Declare bouton_creer()
Declare ecrire_fichier(unite, coef)
;########################################################################### CETTE PARTIE EST NORMALEMENT DANS UN FICHIER A PART ET EST INTÉGRÉ PAR UN "INCLUDE" (modifié pour le forum)
Enumeration
#fenetre_principale
EndEnumeration
;- Gadget Constants
;
Enumeration
#Text_0
#coef_unite
#liste_unite
#bouton_creer
#string_chemin_fichier
#bouton_parcourir
EndEnumeration
Procedure Open_fenetre_principale()
If OpenWindow(#fenetre_principale, 411, 107, 350, 210, "TiCreateFile", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
TextGadget(#Text_0, 10, 10, 330, 20, "Entrez la taille du fichier que vous souhaitez créer et cliquez sur Créer")
StringGadget(#coef_unite, 60, 60, 100, 20, "", #PB_String_Numeric)
ComboBoxGadget(#liste_unite, 190, 60, 100, 20)
ButtonGadget(#bouton_creer, 10, 130, 330, 50, "Créer")
StringGadget(#string_chemin_fichier, 30, 95, 230, 20, "", #PB_String_ReadOnly)
ButtonGadget(#bouton_parcourir, 270, 95, 30, 20, "...")
EndIf
EndProcedure
;#################################################################### FIN DE LA PARTIE INCLUDE
Open_fenetre_principale()
AddGadgetItem(#liste_unite,0,"o (octet)")
AddGadgetItem(#liste_unite, 1,"ko (kilooctet)")
AddGadgetItem(#liste_unite, 2, "Mo (Megaoctet)")
SetGadgetState(#liste_unite, 0)
Debug "Open fenetre :" + cheminFichierDefaut$
Repeat ;début de la boucle principale du programme.
Event = WaitWindowEvent()
Select EventGadget()
Case #bouton_creer
bouton_creer()
Case #bouton_parcourir
bouton_parcourir()
EndSelect
Until Event = #PB_Event_CloseWindow ;fin de la boucle principale du programme.
;---- Procédures ----
Procedure bouton_parcourir()
choixFait = 0 ;boucle permettant d'ouvrir à nouveau SaveFileRequester en cas de collision et si l'utilisateur dis "non"
Repeat
Debug "bouton parcourir"
Debug cheminFichierDefaut$
cheminFichierChoisi$ = SaveFileRequester("Choisissez l'emplacement où vous souhaitez enregistrer le fichier", cheminFichierDefaut$, "Tous les fichiers (*.*)|*.*", 0)
Debug cheminFichierChoisi$
If cheminFichierChoisi$ ;on vérifie que le chemin est valide
Debug Chr(10) + cheminFichierChoisi$
If FileSize(cheminFichierChoisi$) = -1 ;on vérifie que le programme ne va pas écraser un fichier déjà existant
;##########Le fichier n'écrase rien######################
Debug "Le fichier que l'on veut créer n'écrase pas un fichier déjà existant"
choixFait = 1
SetGadgetText(#string_chemin_fichier, cheminFichierChoisi$)
Else ;traitement de l'écrasement de fichier
;###############Le fichier va écraser un fichier #######################
Debug"Le fichier que l'on veut créer va écraser un fichier déjà existant"
resultatMessageRequester = MessageRequester("Attention !", "Le fichier " + cheminFichierChoisi$ + " existe déjà !" + Chr(13) + "Etes vous sûr de vouloir l'écraser ?", #PB_MessageRequester_YesNoCancel)
Select resultatMessageRequester
Case #PB_MessageRequester_Yes
choixFait = 1
SetGadgetText(#string_chemin_fichier, cheminFichierChoisi$)
Debug "Cliqué sur oui dans le MessageRequester"
Case #PB_MessageRequester_No
choixFait = 0
cheminFichierChoisi$ = ""
Case #PB_MessageRequester_Cancel
Debug "CANCEL" + Str(choixFait)
choixFait = 1
cheminFichierChoisi$ = ""
EndSelect
EndIf
Else
Debug "La sélection a été annulée"
choixFait = 1
EndIf
Until choixFait = 1
Debug "CHOIX FINAL = " + cheminFichierChoisi$
EndProcedure
Procedure bouton_creer() ;gere la pression du bonton Créer (string_chemin_fichier vide ? Coefficient vide ?). Crée le fichier puis demande à la fonction ecrire_fichier() d'écrire la quantité qu'il faut.
a$ = GetGadgetText(#coef_unite)
gadgetstate.b = GetGadgetState(#liste_unite)
Debug "coefficient :" + a$ + " Gadgetstate: " + Str(gadetstate)
If a$ = "" Or a$ = "0"
Debug "zéro ou rien (vide) dans le StrinGadget"
MessageRequester("Information", "Veuillez entrer la taille du fichier !", 0)
ElseIf Val(a$) > 500 And gadgetstate = 2
MessageRequester("Valeur trop grande", "Le fichier que vous voulez créer est trop gros, le programme risquerait de planter", 0)
ElseIf cheminFichierChoisi$ = ""
MessageRequester("Aucun emplacement choisi", "Aucun emplacement n'a été choisi, merci de spécifier où enregistrer le fichier", 0)
Else
If CreateFile(#fichier, cheminFichierChoisi$)
Select gadgetstate
Case 0
Debug "Unité : OCTET"
ecrire_fichier(1, Val(a$) )
Case 1
Debug "Unité : KILO"
ecrire_fichier(1024, Val(a$) )
Case 2
ecrire_fichier(1048576, Val(a$) )
EndSelect
CloseFile(#fichier)
MessageRequester("Fichier créé", "Le fichier a bien été créé", 0)
EndIf
EndIf
EndProcedure
Procedure ecrire_fichier(unite, coef) ;crée le fichier en fonction de l'unite choisi.
Debug "Dans ecrire_fichier(), unite = " + Str(unite) + " coef " + Str(coef)
*MemoireID = AllocateMemory(unite)
If *MemoireID
For i=1 To coef
WriteData(#fichier, *MemoireID, unite)
Debug cheminFichierChoisi$ + Str(FileSize(cheminFichierChoisi$))
Next
FreeMemory(*MemoireID)
Else
MessageRequester("Erreur", "Erreur lors de la création du fichier", 0)
EndIf
EndProcedure
; IDE Options = PureBasic 4.60 (Windows - x64)
; CursorPosition = 28
; FirstLine = 6
; Folding = -
; EnableXP