Verwijderd schreef op dinsdag 28 december 2004 @ 18:32:
Wat ik dan gedaan heb kun je zien HOOP ik dat ik niet alles voor gekouwd wi l krijgen
[/code]
en die ben ik nu weer in de tegenstelde richting aan het maken dus je moet niet willen zeggen dat ik alles voor gekouwd wil krijgen.
Er staan tal van programma`s te downloaden die het zelfde doen of kunnen maar met een beetje duwen in de goede richting probeer ik het zelf.
Met het risico op een eeuwige discussie waar we toch niet uitkomen: Je hoeft niet "al je code" hier neer te gooien als "bewijs". Mocht je problemen hebben met een bepaald stukje, dan kun je dat hier neer zetten. De hoeveelheid code zegt totaal utterly niks over hoeveel werk je hebt verzet of hoeveel moeite het heeft gekost. Ik heb gewerkt aan projecten met honderdduizenden en sommige zelfs tegen de miljoen regels code aan, en die waren soms "simpeler" om te maken dan andere projectjes die je in 2 velletjes A4 kunt printen...
Soms kun je over 1 klein dingetje ("1 regeltje" om het zo maar te zeggen) langer piekeren of ermee opgezadeld zitten dan een compleet ander (veel groter) project. En dan is hulp die je hier kunt krijgen een hemels geschenk.
Om even concreet op je code in te gaan: Het is erg veel van hetzelfde, en kan (IMHO) vele malen korter en flexibeler als je bijvoorbeeld al eens de paden die je wil backuppen gewoon in een aparte file bij houdt en dan gewoon een X-aantal keren een bepaalde sub aanroepen. Dat voorkomt onoverzichtelijke code (zoals je nu je code hebt). Verder gebruik je wel erg royaal commentaar (3 regels commentaar per 1 regel code is in sommige gevallen wel nodig (en er is an sich ook niks mis mee)) maar dit is wel erg veel...
Verder is je code onder command3 niet erg netjes: END gebruik je alleen in een sub main die je dus vanuit een module hebt gestart. Wil je dat je form "weg gaat" (en daarmee eventueel je programma dus stopt) dan gebruik je "Unload Me".
Ook zie ik je keer op keer hetzelfde object maken m.b.v. CreateObject. Waarom zou je dit elke keer weer doen? 1x is genoeg. Je kunt het object gewoon een volgende "opdracht" geven door de filecopy method opnieuw aan te roepen...
Concreet: Iets als:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| '************************
'** Ws_FTP Instelingen **
'************************
If chkFiles(6).Value = vbChecked Then
'************************************************
'** Kijkt of Backup_Bestanden\WS_FTP bestaat **
'************************************************
Set Ws_ftp = CreateObject("scripting.filesystemobject")
If Not Ws_ftp.folderexists("D:\Backup_Bestanden\WS_FTP") Then
MkDir ("D:\Backup_Bestanden\WS_FTP")
End If
'***************************************************
'** Kopieert de onderstaande mappen en bestanden **
'***************************************************
van_map = X.CopyFolder("C:\Documents and settings\" & oNetwork.UserName & "\Application Data\Ipswitch\WS_FTP\Sites", "D:\Backup_Bestanden\WS_FTP")
End If
'***********************
'** Emule Instelingen **
'***********************
If chkFiles(7).Value = vbChecked Then
'************************************************
'** Kijkt of Backup_Bestanden\Emule bestaat **
'************************************************
Set Emule = CreateObject("scripting.filesystemobject")
If Not Ws_ftp.folderexists("D:\Backup_Bestanden\Emule") Then
MkDir ("D:\Backup_Bestanden\Emule")
End If
'***************************************************
'** Kopieert de onderstaande mappen en bestanden **
'***************************************************
van_map = X.CopyFolder("C:\Program Files\eMule\Config", "D:\Backup_Bestanden\Emule\")
End If |
Wordt dan al gauw:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
| Set oMyObject = CreateObject("scripting.filesystemobject")
If chkFiles(6).Value = vbChecked Then
If Not oMyObject.folderexists("D:\Backup_Bestanden\WS_FTP") Then MkDir ("D:\Backup_Bestanden\WS_FTP")
van_map = X.CopyFolder("C:\Documents and settings\" & oNetwork.UserName & "\Application Data\Ipswitch\WS_FTP\Sites", "D:\Backup_Bestanden\WS_FTP")
End If
If chkFiles(7).Value = vbChecked Then
If Not oMyObject.folderexists("D:\Backup_Bestanden\Emule") Then MkDir ("D:\Backup_Bestanden\Emule")
van_map = X.CopyFolder("C:\Program Files\eMule\Config", "D:\Backup_Bestanden\Emule\")
End If |
Vervolgens kun je je een boel werk besparen door een for-lus te gebruiken als je je checkboxes wil uitlezen:
code:
1
2
3
4
5
6
7
8
| Dim T as integer
For T = 0 to chkFiles.count-1
If chkFiles(T).value = vbChecked then
...
...
End If
Next |
Ook het juist gebruik van subroutines mis ik. Ik zie telkens weer:
code:
1
2
3
| If Not Ws_ftp.folderexists("blablablabla") Then
MkDir ("blablablabla")
End If |
Buiten het feit dat als een pad wijzigt dat je het dan al 2x moet aanpassen, is het later, als blijkt dat deze "simpele check" niet voldoende of goed werkt een hel om aan te passen (je moet het dan immers tig keer in je project aanpassen. Je kunt dan beter iets doen in de trend van:
Visual Basic:
1
2
3
| Public Sub CheckAndCreateDir(strFolderName as string)
If Not Ws_ftp.folderexists(strFolderName) Then MkDir (strFolderName)
End Sub |
Je kunt dan gewoon telkens hetvolgende doen:
Visual Basic:
1
2
3
| CheckAndCreateDir "C:\MyFolder\Blabla"
CheckAndCreateDir "C:\MyFolder\Joehoe"
... |
Op deze manier hoef je een pad maar 1x te wijzigen.
Even daarop doorgaande, wat dacht je hiervan:
code:
1
2
3
4
5
6
7
8
9
| BackupFolder "C:\MyFolder\Blabla"
BackupFolder "C:\MyFolder\Joehoe"
Public Sub BackupFolder(strFolderName as string)
CheckAndCreateDir strFolderName
...
...hier je backup code
...
End Sub |
Daarmee "nest" je dus al 2 subs en kun je in 1 regel code een complete directory backuppen. Maak je van de Subs vervolgens Functions, dan kun je ook statuscodes gaan teruggeven (gelukt of niet)> In deze opzet kun je ook later makkelijk centraal error-handling per subroutine inbouwen, hetgeen ook ontbreekt in je code. Wat als je programma een map niet
kan maken of vinden?
Vervolgens pas je je programma weer zodanig aan dat de instellingen (welke mappen gebackupped moeten worden) uit een bestand worden gelezen in een array of collection of whatever, en dan kun je dus weer met een lusje in één klap 1, 2, 54 of 10.000.000 bestanden backuppen:
code:
1
2
3
| For T=0 to UBound(arrFiles)
BackupFolder arrFiles(T)
Next |
Je ziet dat je zo een stuk flexibeler bent en het onderhoud aan je code (dat komt er geheid, bij iedereen, in elk project) is dan een stuk aangenamer (hoewel ik vrees dat het nooit écht aangenaam zal worden
Ik heb er in iedergeval nog nooit lol aan beleefd

)
Nogmaals, niet verkeerd bedoeld: Neem even pauze van dit project, laat alles even bezinken, neem een tutorial of goed VB boek bij de hand en bekijk het project dan nog eens. Je zult snel merken dat je heel veel werk dubbel zit te doen en dit waarschijnlijk in een paar regels code netter en flexibeler kunt opzetten dan je nu bezig bent. Je zult er alleen maar van profiteren. Ik zie gewoon dat je wat basisprincipes mist, en daar is niks mis mee. Zo zijn we allemaal begonnen en we hebben het allemaal geleerd (velen onder ons
ook met hulp van anderen, zoals GoT). Sluit je bij ons aan
[
Voor 134% gewijzigd door
RobIII op 28-12-2004 20:41
]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij