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 :
- Private Declare Function GetLogicalDriveStrings Lib "kernel32" _
- Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, _
- ByVal lpBuffer As String) As Long
- Private Declare Function GetDriveType Lib "kernel32" Alias _
- "GetDriveTypeA" (ByVal nDrive As String) As Long
- Dim lgCptCD As Integer
- Dim tabCD(20) As String
- Private Sub Form_Load()
- Dim strSave As String
- Dim lgFor As Long, lgRet As Long
- Me.AutoRedraw = True
- lgCptCD = 0
- strSave = String$(255, Chr$(0))
- lgRet = GetLogicalDriveStrings(255, strSave)
- Do Until Left$(strSave, 1) = Chr$(0)
- If GetDriveType(Left$(strSave, InStr(1, strSave, Chr$(0)) - 1)) = 5 Then
- lgCptCD = lgCptCD + 1
- tabCD(lgCptCD) = Left$(strSave, 3)
- End If
- strSave = Right$(strSave, Len(strSave) - 4)
- Loop
- Me.Print "Bilan de lecteurs de Cd-Rom :"
- For lgFor = 1 To lgCptCD
- Me.Print "Lecteur : " & lgFor & " = " & tabCD(lgFor)
- Next
- 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 :
- |
- |tu as du code avant !
- |
- dim a
- a = inputBox("Tapez le nom du nouveau dossier","dossier" )
- if a <> "" then
- else
- end sub
- |
- |tu as du code aprés en particulier celui que je veux te mettre.
- |
- |
- exit sub
|
Code :
- Sub cmdTest_Click()
- Dim sa As SECURITY_ATTRIBUTES
- Dim new_folder As String
- ' Sécurité par défaut (non utilisé sous Windows 9x).
- sa.nLength = Len(sa)
- sa.bInheritHandle = 0&
- new_folder = InputBox("enter the name of the now folder", _
- GAE_Title, "new" )
- If Not new_folder Like Empty Then
- Call GAE_CreateDir(GAE_IMPORT_U1.Dir1.Path & "\" & new_folder, sa)
- End If
- End Sub
- Sub GAE_CreateDir(pathname, secu As SECURITY_ATTRIBUTES)
- Dim resul As Boolean
- resul = CreateDirectory(pathname, secu)
- End Sub
|
place ses élèments suivant, indispensable au bon fonctionement, de la création d'un dossier, dans un module : ajouter > module
Code :
- public Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" ( _
- ByVal lpPathName As String, _
- lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
- Type SECURITY_ATTRIBUTES
- nLength As Long
- lpSecurityDescriptor As Long
- bInheritHandle As Long
- 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 :
- Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" ( _
- 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 :
- Declare Function FindClose Lib "kernel32" ( _
- 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 . 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... 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
Message édité par cvb le 04-06-2003 à 01:16:04