Archivage de fichiers photos

Archivage de fichiers photos - VB/VBA/VBS - Programmation

Marsh Posté le 03-06-2003 à 21:35:16    

Bonjour à tous!!
 
Je souhaiterai faire un programme d'archivage de photos.
Je vous explique ce que le  programme doit faire.
 
Lorsque je click sur l'icone du prog il doit lire le contenu du CD que j'ai insérer, ensuite il doit créer un repertoire ds un endroit de mon choix( cette endroit sera defini ds le code du prog), attribuer a ce repertoire un nom et copier les fichiers de types JPEG, BMP, TIFF, AIF du CD dans ce répertoire.
A chaque appel du prog je dois créer un fichier avec un nom incrémental.
 
Exemple:
je lance le prog, il lit le cd et place le contenu ds le dossier 1
je relance le prog, il lit le cd et place le contenu ds le dossier 2
...etc,etc,etc
 
Tout d'abord je souhaiterai savoir si cela est réalisable en VB et si oui pourriez vs m'aidez a le faire.
Ds l'attente de vos réponses je vous remercie.

Reply

Marsh Posté le 03-06-2003 à 21:35:16   

Reply

Marsh Posté le 04-06-2003 à 01:12:10    

oui, c'est possible ! comme une recette de cuisine on débute par le début et ont se pose des questions, la seule que je trouve, c'est comment va savoir que les derniers fichiers ont été copier dans le répertoire X ? on n'y reviendras.
 
1/ Détecter d'abord le lecteur de CD ! Chaque machine à sa propre lettre, il faut y penser !
2/ créer ton répertoire
3/ travailler avec la Base de registre !
4/ vérifier que tes dossier y sont toujours aprés chaque ouverture de ton programme (en cas d'éfacement tu fais comment ?) t'es dans la **** !
 
 
-----------------
I/ Lecteur de Cd
-----------------
 
Rien de bien compliqué, il faut utiliser une fonctions propres à windows, à savoir les API windows. Voici le code à modifier et à comprendre en fonction de ce que tu veux faire. Une fois la lettre trouver, tu la concaquetane, à au reste du chemin, de ton CD...(Cf chap 5 ou 6)
 

Code :
  1. Private Declare Function GetLogicalDriveStrings Lib "kernel32" _
  2.         Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, _
  3.         ByVal lpBuffer As String) As Long
  4. Private Declare Function GetDriveType Lib "kernel32" Alias _
  5.         "GetDriveTypeA" (ByVal nDrive As String) As Long
  6. Dim lgCptCD As Integer
  7. Dim tabCD(20) As String
  8. Private Sub Form_Load()
  9. Dim strSave As String
  10. Dim lgFor As Long, lgRet As Long
  11. Me.AutoRedraw = True
  12. lgCptCD = 0
  13. strSave = String$(255, Chr$(0))
  14. lgRet = GetLogicalDriveStrings(255, strSave)
  15. Do Until Left$(strSave, 1) = Chr$(0)
  16.     If GetDriveType(Left$(strSave, InStr(1, strSave, Chr$(0)) - 1)) = 5 Then
  17.         lgCptCD = lgCptCD + 1
  18.         tabCD(lgCptCD) = Left$(strSave, 3)
  19.     End If
  20.     strSave = Right$(strSave, Len(strSave) - 4)
  21. Loop
  22. Me.Print "Bilan de lecteurs de Cd-Rom :"
  23. For lgFor = 1 To lgCptCD
  24.     Me.Print "Lecteur : " & lgFor & " = " & tabCD(lgFor)
  25. Next
  26. End Sub

 
 
 
-------------------------
II/ Création des dossiers
-------------------------
 
Tu peux toujours le faire avec un API windows, mais je sais que Vb  en n'as une par défaut, j'ai oublié le name ! sinon, c'est celle-ci. Tu demande le nom dans une inputbox. Tu devras contrôler la validité du nom en controlant chacun des caractères de sortie, cherche LEN dans l'aide, tu auras toutes les fonctions pour traiter les chaines de caractères.
 

Code :
  1. |
  2. |tu as du code avant !
  3. |
  4. dim a
  5. a = inputBox("Tapez le nom du nouveau dossier","dossier" )
  6. if a <> "" then
  7. else
  8. end sub
  9. |
  10. |tu as du code aprés en particulier celui que je veux te mettre.
  11. |
  12. |
  13. exit sub


 

Code :
  1. Sub cmdTest_Click()
  2. Dim sa As SECURITY_ATTRIBUTES
  3. Dim new_folder As String
  4. ' Sécurité par défaut (non utilisé sous Windows 9x).
  5. sa.nLength = Len(sa)
  6. sa.bInheritHandle = 0&
  7. new_folder = InputBox("enter the name of the now folder", _
  8.              GAE_Title, "new" )
  9. If Not new_folder Like Empty Then
  10.     Call GAE_CreateDir(GAE_IMPORT_U1.Dir1.Path & "\" & new_folder, sa)
  11. End If
  12. End Sub
  13. Sub GAE_CreateDir(pathname, secu As SECURITY_ATTRIBUTES)
  14. Dim resul As Boolean
  15. resul = CreateDirectory(pathname, secu)
  16. End Sub


 
place ses élèments suivant, indispensable au bon fonctionement, de la création d'un dossier, dans un module : ajouter > module
 

Code :
  1. public Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" ( _
  2.                  ByVal lpPathName As String, _
  3.                  lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
  4. Type SECURITY_ATTRIBUTES
  5.     nLength As Long
  6.     lpSecurityDescriptor As Long
  7.     bInheritHandle As Long
  8. End Type


 
Voilà; à peux prés le code. D'allieur dans le code, il a procédé, si tu as fais attention, il a utilse Inputboc...inspire t'en.
 
 
-----------------------
III / BASE DE REGISTRE  
------------------------
 
L'inconveinient des foncions de VB pour le registre, c'est qu'elle agissent uniquement sous une clé : VBA and VB setting...emmerdant ! Pourquoi, le registre ? c'est le seul endroit qui garde l'info, aprés la fermeture d'un programme.Je ne vais pas te faire le chapeller de windows, dans l'aide MSN tu tape base de registre, tu as les fonction de VB pour la Bdr qui se pointe...il faut les étudier...
 
sinon, pour agir allieur, que sous une clé précise, va sur ce site, tu les trouveras, mais il faut un peu d'expérience dans ce domaine pour comprendre  http://docvb.free.fr/api.php (tous les exemples que j'ai mis viennent de là, tous comme le nom des fonctions que je te donnerais encore)
 
Ce que tu devras faire, avec le registre, c'est en gros, mettre le nom du dossier dans lequel, les derniers fichiers auront été copié...et récupérer ce nom à l'ouverture, et le garder tous le long de l'ouverture, du programme via une variable PUBLIC, et gérer les autres fichiers à copier, dans d'autres dossier...
 
------------------------------------
IV/ VERIFIER LE CONTENU DES DOSSIERS
-------------------------------------
 
Il faut vérifier que les dossier que tu as créer  - tu devras garder le chemin principal, dans la Bdr - y soit toujours, pour demander à l'utilisateur de récréer les dossier et le cas échant lui spécifier une erreur critiques...Encore une fois les API windows, elle renvera -1 si le dossier n'existe pas et un nombre X, qualifiant, l'attribut du dossier ou fichier (lecture seule,,ect...)
 

Code :
  1. Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" ( _
  2.                  ByVal lpFileName As String) As Long


 
va voir sur le site que je t'ai donné + haut, tu as des choses à rajouter et tu as des exploications...
 
----------------------------------------------
V/ COMMENT TROUVER LES FICHIER IMAGE SUR LE CD ?
----------------------------------------------
 
Je ne sais pas comment tu va faire, car tu n'as rien dis. Mais tu devras, si tu le fais automatiquement utiliser la détection du lecteur du CD ( Cf. I) et une second fonction dans laquelle tu emboiteras la lettre en questions.  
 
 
c'est l'API :  
 

Code :
  1. Declare Function FindClose Lib "kernel32" ( _
  2.                  ByVal hFindFile As Long) As Long


 
Comme pour l'autre va voir sur le site, tu as l'exemple qui fais trois pages. Elle est difficile d'emploi et des connaissances en particulier dans les variables dynamiques sont à connaître...elle est assez compliqué. A placer dans un module.
 
 
-----------------------
VI/ CONCLUSION
-----------------------
 
Je crois que j'ai tout dis  :D . Ce que tu veux faire relève d'avoir de la bouteille en prog. et de connaître les API windows, sur le bout des doigt ou plutôt le rôle des FONCTIONS, dont tu auras besoin.
 
Tu en n'as pour plusieurs jours de prog sans compter la gestions d'erreur. Sans te mentir, perso, j'en n'aurais pour 3/4 jours, à temps plein, histoire d'éviter tous les bugs...
 
je te souhairte bonne chance... :jap: pose des questions, certains se feront un plaisir de te répondre. ;) sinon, tu as aussi www.vbfrance.com qui pourra t'apporter de l'aide
 
---------------------------
En espérant avoir été clair...
@+
Cvb :hello:  :jap:


Message édité par cvb le 04-06-2003 à 01:16:04
Reply

Marsh Posté le 04-06-2003 à 11:28:16    

Tout d'abord un grand merci pour cette réponse ultra complète MERCI :)
 
ensuite la fin de ton post me décourage un peu car je n'ai jamais touché à VB de ma vie et je penser que cela serai plus simple erf...
 
je vais essayer qd meme mais je ne suis pas contre un petit coup de main lol  :ange:  :ange:  :ange:  
 
Koi k'il en soit encore une fois grd MERCI ;)

Reply

Marsh Posté le 04-06-2003 à 11:38:50    

ecniv a écrit :

Tout d'abord un grand merci pour cette réponse ultra complète MERCI :)
 
ensuite la fin de ton post me décourage un peu car je n'ai jamais touché à VB de ma vie et je penser que cela serai plus simple erf...
 
je vais essayer qd meme mais je ne suis pas contre un petit coup de main lol  :ange:  :ange:  :ange:  
 
Koi k'il en soit encore une fois grd MERCI ;)

je t'en prie ! soit pas décourager, il faut que tu prenne chaque fonction que tu les etudient dans par exemple des projets différents. Une fois compris, l'ensemble des fonctions, ou tout du moins le fonctionnement, c'est comme les LEGO, sa s'emboite ensemble dans un ordre précis...
 
Aprés si tu veux des coups de mains,on t'en donnera, mais on peut pas faire le programme à ta place, c'est pas possible. Pour ça on t'invite à donner le code, sur lequel t'as un problème avec tout les intervenants autour, sur quoi il agit et qui agit sur lui, histoire d'avoir toutes les pièces en main pour travailler....
 
Voilà, et bon courage, sa paraît dur, mais une fois fais du rigolera de sa simplicité...;)
  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed