Aller au contenu

Créateur de fichiers et de dossiers en masse


ZOTHOP

Messages recommandés

Membre, 49ans Posté(e)
ZOTHOP Membre 329 messages
Forumeur Débutant‚ 49ans‚
Posté(e)

Bonjour,

Depuis un certains temps, je me suis mis à la programmation. J'ai créé un outil qui permet de générer des fichiers et des dossiers inutiles en masse afin de travailler dessus en programmation sans crainte de les détériorer puisqu'ils ne servent à rien et ainsi préserver d'autres fichiers plus important.

Ce programme est en AutoIt et fonctionne sous Windows, copiez et collez le code source dans le bloc note et sauvez le dans un fichier portant l'extention au3. Puis allez sur cette page pour télécharger le langage et le compilateur si vous ne possédez pas l'AutoIt sur votre PC : page de téléchargement .

J'ai créé le logiciel de manière à ce qu'il soit simple à utiliser ; il suffit de suivre les étapes et les diverses boites de dialogues qui pourraient s'afficher. Soyez quand même prudent en l'utilisant ; je ne suis pas un professionnel de la programmation mais un simple chef de rayon dans un supermarché.


#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### 
$Form1 = GUICreate("CréateurFichiers&Dossiers", 642, 332, 247, 196)
$Group1 = GUICtrlCreateGroup("PREMIERE ETAPE : sélectionnez un dossier de destination vide", 0, 0, 641, 105)
$Input1 = GUICtrlCreateInput("", 56, 40, 393, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button1 = GUICtrlCreateButton("Sélectionnez un dossier", 464, 40, 171, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("SECONDE ETAPE : entrez le nombre de dossiers ou de fichiers à créer ( pas plus de 50 )", 0, 112, 641, 97)
$Input2 = GUICtrlCreateInput("", 88, 152, 473, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_NUMBER))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("TROISIEME ETAPE : cliquez sur un des deux boutons pour créer des fichiers ou des dossiers", 0, 216, 641, 81)
$Button2 = GUICtrlCreateButton("CREER DES FICHIERS", 72, 240, 195, 49)
$Button3 = GUICtrlCreateButton("CREER DES DOSSIERS", 387, 241, 195, 49)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label1 = GUICtrlCreateLabel("ZOTHOP", 296, 312, 48, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
$controlinput2=GUICtrlRead($Input2)
if $controlinput2>50 then
GUICtrlSetData($Input2,50) ; si le nombre entré dépasse 50, il retourne à 50 automatiquement
endif 
Select
case $nMsg=$Button1 ; sélection du dossier de destination
$Dossier=FileSelectFolder("Sélectionnez un dossier","",1) 
	$verif=DirGetSize($Dossier,1)

	if $verif[0]>0 or $verif[1]>0 or $verif[2]>0 Then ; vérification que le dossiers est bien vide ( voir la doc AutoIt pour les données de l'Array )
		MsgBox(16,"ATTENTION","le dossier "&$Dossier&" n'est pas vide, veuillez sélectionner un dossier vide ou en créer un !")
	$Dossier=FileSelectFolder("Sélectionnez un dossier","",1)
EndIf

	GUICtrlSetData($Input1,$Dossier)
Case $nMsg=$Button2 ; création des fichiers
	$ControlInput1=GUICtrlRead($Input1)
	$ControlInput2=GUICtrlread($Input2)
	#cs----------------------------------------------------
					Series de contrôles
	#ce----------------------------------------------------

	if $ControlInput1="" Then ; si la destination n'a pas été sélectionné
		MsgBox(16,"ATTENTION !!!","Sélectionnez un dossier de destination SVP !")
	EndIf

	if $ControlInput2="" Then ; si le nombre de dossiers ou de fichiers à créer n'a pas été entré
		MsgBox(16,"ATTENTION !!!","Entrez un nombre de dossiers ou de fichiers SVP !")
		Endif


	if $ControlInput1>"" and $ControlInput2>"" Then
		for $a=1 to $ControlInput2
			$file=FileOpen($ControlInput1&"\test"&$a&".txt",2) ; création des fichiers
			FileWrite($file,"Test"&$a)
			FileClose($file)
			next
			Endif
		case $nMsg=$Button3
			$ControlInput1=GUICtrlRead($Input1)
	$ControlInput2=GUICtrlread($Input2)
	#cs----------------------------------------------------
					Series de contrôles
	#ce----------------------------------------------------

	if $ControlInput1="" Then ; si la destination n'a pas été sélectionné
		MsgBox(16,"ATTENTION !!!","Sélectionnez un dossier de destination SVP !")
	EndIf

	if $ControlInput2="" Then ; si le nombre de dossiers ou de fichiers à créer n'a pas été entré
		MsgBox(16,"ATTENTION !!!","Entrez un nombre de dossiers ou de fichiers SVP !")
		Endif


	if $ControlInput1>"" and $ControlInput2>"" Then
		for $a=1 to $ControlInput2
		DirCreate($ControlInput1&"\Test"&$a) ; création des dossiers
		next
			Endif

EndSelect

Switch $nMsg
	Case $GUI_EVENT_CLOSE
		Exit

EndSwitch
WEnd

Cordialement !

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

Pas mal.

Quelques petites remarques cependant :

-soigne ton indentation : aligne les endif sur les if corespondants, met tous les Case au meme niveau, met deux lignes de code consécutives au meme niveau si la première ne contient ni if, ni case, etc... (l'intérêt de faire ça correctement est ici pour la lisibilité du code, mais si tu programme un jour en python ou l'indentation est porteuse de sens ou simplement si tu écrit des programmes plus complexes, ça te jouera des problèmes)

-essaie de factoriser ton code par l'usage de fonctions (il faut éviter de répéter le meme code au maximum, là, tu refait deux fois les mêmes tests.) Immagine que tu ait besoin de modifier ces tests, dans ton code, il faut le modifier à deux endroits. Si ces tests étaient fait dans une fonction appelée 2 fois, tu n'aurais qu'une seule modification à faire.

-le fenetré, c'est bien à titre formateur pour ce genre de programmes. Mais la ligne de commande, c'est mieux pour l'automatisation de tes programmes. Immagine que tu ait besoin de lancer ce programme 25 fois. 25 fois, tu devra lancer ton programme, aller cliquer sur bouton destination, sélectionner le dossier destination, valider, aller cliquer sur le champ "nombre de copies", rentrer le nombre de fichier à créer, et je ne sais encore combien de déplacement de souris et clics sur boutons. Immagine maintenant que ait une ligne de commande (un programme sous dos, puisque tu est sous windows) et que tu n'ait qu'à copier/coller 25 fois :

monprogramme -dest=c:\mondossierpourri1 -f=50

c'est beaucoup plus facile à faire (bien moins de gestes de ta part), et automatisable dans un script.

-soit dit en passant, un programme en ligne de commande, avec le meme objectif, c'est une dizaine de lignes de code en GNU-bash sous linux (dont 5 pour faire le tri des arguments) (en utilisant touch pour créer un fichier vide (ou une indirection pour y mettre un contenu) et mkdir pour créer un dossier vide.) Cependant, je ne sais pas si c'est possible sous windows (enfin, sous DOS), peut être en mettant une version de bash pour windows.

-quel est l'intérêt de ton programme, j'ai beau chercher, je n'en vois pas l'utilité (sinon didactique - et c'est déjà pas mal ;) ).

Lien à poster
Partager sur d’autres sites

Membre, 49ans Posté(e)
ZOTHOP Membre 329 messages
Forumeur Débutant‚ 49ans‚
Posté(e)

L'équivalent du Bash de Linux est Batch sous Windows. L'intérêt du programme est de créer des fichiers inutile pour tester les fonctions d'un logiciels, si on a fait une bêtise on flingue un fichier inutile et non un fichier plus important.

Cet outil m'a servit il y a peu, pour tester un logiciel de ma création qui permet de sélectionner des fichiers et des dossiers dans un listview pour les supprimer. Pouvoir créer beaucoup de fichiers et travailler dessus m'a été très utile.

Lien à poster
Partager sur d’autres sites

Membre, 49ans Posté(e)
ZOTHOP Membre 329 messages
Forumeur Débutant‚ 49ans‚
Posté(e)

L'intérêt de mon programme est de créer des fichiers inutiles pour tester les fonctions de gestion de fichier d'un logiciels, si on a fait une bêtise on flingue des fichiers inutiles et non des fichiers plus important.

Cet outil m'a servit il y a peu, pour tester un logiciel de ma création qui permet de sélectionner des fichiers et des dossiers dans un listview pour les supprimer. Pour les tests, j'ai eu besoin de beaucoup de fichiers à supprimer, pouvoir en créer en masse et travailler dessus m'a été très utile, je me voyais mal en créer autant moi même.

Il est vrais que les deux boutons m'ont obligé à doubler les contrôles ( en même temps, avec un bon copier coller ça va tout seul :smile2: ), je suis conscient qu'un bouton et deux radio auraient réduit la tâche.

Ceux pour qui mon logiciel ne plait pas ils peuvent toujours faire un clic droit sur le bureau, aller dans le menu nouveau, choisir document texte autant de fois qu'ils veulent créer des fichiers.

J'ai voulu automatiser une tâche rébarbative, partager un outil et un savoir, mais si mes programmes n'ont aucune utilité, je les garderai pour moi à l'avenir. :dev:

Lien à poster
Partager sur d’autres sites

Membre, 90°, 49ans Posté(e)
miq75 Membre 2 862 messages
49ans‚ 90°,
Posté(e)

Je ne te parle pas de faire un radio et un bouton au lieu de deux boutons, je te parle de faire une fonction unique que tu appelle dans chacun tes deux boutons et qui effectue la batterie de tests (sans changer ton interface). On s'en fout, ici, du nombre de boutons ou de l'ergonomie de ton programme. Ce qui compte c'est de prendre de bonne habitudes de programmation et d'éviter les doublons.

Un truc du genre (je ne connais pas la syntaxe de ton langage, alors c'est du pseudocode):

booleen function tests()
   if $ControlInput1="" Then ; si la destination n a pas été sélectionné
       MsgBox(16,"ATTENTION !!!","Sélectionnez un dossier de destination SVP !")
   EndIf

   if $ControlInput2="" Then ; si le nombre de dossiers ou de fichiers à créer n a pas été entré
       MsgBox(16,"ATTENTION !!!","Entrez un nombre de dossiers ou de fichiers SVP !")
   Endif
   Return $ControlInput1>"" and $ControlInput2>""
Endfunction

;et tu vire les tests qui sont dans tes CASE pour mettre directement :

if tests() then 
   ;ce que tu doit faire pour creer tes fichiers ou dossiers
Endif   

C'est ça qu'on appelle factoriser le code.

Imagine un instant que tu fasse 10 boutons pour rajouter plein de fonctionnalités, tu recopiera 10 fois les tests ? et le jour ou tu voudra les modifier, tu risque d'en oublier quelques uns. Ce ne sera pas le cas si tu factorise, car tu n'aura alors que le contenu de ta fonction à modifier pour mettre à jour en une fois tous les tests.

Sinon, pour ce qui est d'écrire tout ce code pour créer des dossier/fichiers, je trouve personnellement que c'est utiliser une armada pour couler un radeau....

le code bash suivant crée 20 dossiers et 20 fichiers :

#!/bin/bash
for (( x=1; x<20; x++ ))
do
   echo "youpi" > f$x
   mkdir d$x
done

Moi, je taperais ça au besoin directement dans ma console. Et éventuellement si je l'emploie souvent, je le mettrai dans un fichier et je règlerai les valeurs au besoin directement en éditant ce fichier. C'est pour ça que je te dit que je ne voie pas l'intérêt d'un programme avec interface graphique de plus de 60 lignes pour si peu. Sauf si tu le fait dans l'intention de te former. Là oui.

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×