|
| Rekursivt kald virker i VB-Envirome Fra : Allan |
Dato : 06-07-01 13:41 |
|
Hej Alle
Jeg har lavet et lille program der rekursivt finder biblioteker og
underbiblioteker..
Jeg bruger et rekursivt kald til at trave igennem alle biblioteker. Jeg
laver en exe-fil og herefter kører programmet, men virker det ikke. ex:
c:\test
- a
- aa
- b
- c
- ca
c:\test c:\test\a og c:\test\aa bliver gennemgået men ikke c:\test\b osv.
Humlen er at programmet virker når jeg kører programmet i VB, men ikke når
jeg kører det som en exe-fil.
Håber i forstår hvad jeg mener!
| |
preben nielsen (06-07-2001)
| Kommentar Fra : preben nielsen |
Dato : 06-07-01 17:02 |
|
"Allan" <ahj@bminet.dk> skrev i en meddelelse
news:a9d9a699.0107060440.18284a97@posting.google.com...
> Hej Alle
>
> Jeg har lavet et lille program der rekursivt finder biblioteker
og
> underbiblioteker..
>
[SNIP]
>
> Humlen er at programmet virker når jeg kører programmet i VB,
men ikke når
> jeg kører det som en exe-fil.
>
> Håber i forstår hvad jeg mener!
Forventer du at folk skal fortælle dig hvad du gør galt når du
ikke viser HVAD du gør ?
Det er let nok at finde dig noget code som virker, men vil du
ikke helst have rettet fejlen i din egen code ??
--
/\ preben nielsen
\/\ prel@post.tele.dk
| |
Allan (09-07-2001)
| Kommentar Fra : Allan |
Dato : 09-07-01 09:55 |
|
Hej Preben
Det kan du dælme godt have ret i:
BMIVBFILE OG BMIFILE er klasser i en dll vi selv har lavet.
Form1 viser bare en status.
Option Explicit
Dim BMIVBFILE As New BMIPROC.modVBFileDisk
Dim BMIFILE As New BMIPROC.clsFiles
Dim aCommand() As String
Dim sMainFolder As String
Dim sChangeFrom As String
Dim sChangeTo As String
Sub Main()
'Declarations
Dim sCommandline As String
Dim sCurrentFolder As String
Form1.Show
'Hent Commandline og gem i variabler
sCommandline = Command()
If sCommandline = "" Then
Exit Sub
End If
aCommand() = Split(sCommandline, " ")
If aCommand(0) = "" Or aCommand(0) = "" Then
Exit Sub
End If
sCurrentFolder = aCommand(0)
sChangeFrom = aCommand(1)
sChangeTo = aCommand(2)
'Rename filerne rekursivt gemmen bibliotekerne
Call ChangeFileInLib(sCurrentFolder)
GoTo Exit_Sub
Error_Handler:
MsgBox Err.Description
Exit_Sub:
Set BMIVBFILE = Nothing
Set BMIFILE = Nothing
MsgBox "Operation Completed", vbInformation, "Change"
End Sub
Private Sub ChangeFileInLib(sCurrentFolder As String)
On Error Resume Next
Dim aSubFolder() As String
Dim aFileSource() As String
Dim I As Integer
Dim J As Integer
Form1.lblCurrentLib = sCurrentFolder
Form1.Refresh
'Hent alle subfolder
Call BMIVBFILE.SubDirsToArray(sCurrentFolder, aSubFolder(), True, True)
'Læg alle filer i array
aFileSource = MoveFilesToArray(sCurrentFolder)
'Omdøb for hver fil i nuværende bib.
For I = LBound(aFileSource) To UBound(aFileSource)
Call ChangeFile(sCurrentFolder & aFileSource(I))
Next I
'Kald rekursivt for hver underbibliotek i nuværende bib.
For J = LBound(aSubFolder) To UBound(aSubFolder)
'MsgBox "NEXT ChangeFileInLib: " & sCurrentFolder & aSubFolder(J)
Call ChangeFileInLib(sCurrentFolder & aSubFolder(J))
Next J
End Sub
Private Function MoveFilesToArray(sCurrentFolder As String) As Variant
On Error Resume Next
'Declarations
Dim BMIVBFILE As New BMIPROC.modVBFileDisk
Dim aFile() As String
'Hent alle filer i folderen
Call BMIVBFILE.FilesToArray(sCurrentFolder, True, True, aFile)
'Returner array
MoveFilesToArray = aFile
End Function
Private Sub ChangeFile(sFile As String)
Dim sNewFile As String
Dim sFilePath As String
Dim sFileName As String
Static nChangeCount As Integer
'Test
Debug.Print sFile & ":" & InStr(1, sFile, sChangeFrom)
If InStr(1, sFile, sChangeFrom) > 0 Then
nChangeCount = nChangeCount + 1
Form1.lblChangeCount.Caption = nChangeCount
End If
Form1.lblCurrentFile.Caption = sFile
Form1.Refresh
'Gem path og filnavn
sFilePath = BMIFILE.ExtractPath(sFile, True)
sFileName = BMIFILE.ExtractFile(sFile)
'Ændre kun filnavn store og små bogstaver
sFileName = Replace(sFileName, sChangeFrom, sChangeTo)
sFileName = Replace(sFileName, UCase(sChangeFrom), sChangeTo)
'Gem nyt navn
sNewFile = sFilePath + sFileName
'Rename the current file
Name sFile As sNewFile
End Sub
ahj@bminet.dk (Allan) wrote in message news:<a9d9a699.0107060440.18284a97@posting.google.com>...
> Hej Alle
>
> Jeg har lavet et lille program der rekursivt finder biblioteker og
> underbiblioteker..
>
> Jeg bruger et rekursivt kald til at trave igennem alle biblioteker. Jeg
> laver en exe-fil og herefter kører programmet, men virker det ikke. ex:
> c:\test
> - a
> - aa
> - b
> - c
> - ca
>
> c:\test c:\test\a og c:\test\aa bliver gennemgået men ikke c:\test\b osv.
>
> Humlen er at programmet virker når jeg kører programmet i VB, men ikke når
> jeg kører det som en exe-fil.
>
> Håber i forstår hvad jeg mener!
| |
Niels (12-07-2001)
| Kommentar Fra : Niels |
Dato : 12-07-01 18:25 |
|
Hej
Jeg kikke lidt på koden. Umiddelbart ser koden ok ud.
Men jeg ser du bruger On Error Resume Next. Dette er
potenitelt farligt. Specitelt hvis der er fejl hvor man ikke
forventer det (On Error Resume Next er til kente fejl man
vil ignorere), og ved kald af egne funktioner der er fejl i.
Jeg vil anbefale at du midlertidigt erstatter On Error Resume Next
med On Error Goto VisFejl:
og tilføje i funktionerne
VisFejl:
MsgBox Str$(Err.Number) & ":" & Err.Description
Resume Next
Og så test efter at der ikke opstår fejl der ikke var forventet.
- Niels G.
"Allan" <ahj@bminet.dk> wrote in message
news:a9d9a699.0107090055.38de2859@posting.google.com...
> Hej Preben
>
> Det kan du dælme godt have ret i:
>
> BMIVBFILE OG BMIFILE er klasser i en dll vi selv har lavet.
> Form1 viser bare en status.
>
> Option Explicit
>
>
>
> Dim BMIVBFILE As New BMIPROC.modVBFileDisk
> Dim BMIFILE As New BMIPROC.clsFiles
>
> Dim aCommand() As String
> Dim sMainFolder As String
> Dim sChangeFrom As String
> Dim sChangeTo As String
>
>
>
> Sub Main()
> 'Declarations
> Dim sCommandline As String
> Dim sCurrentFolder As String
>
> Form1.Show
>
> 'Hent Commandline og gem i variabler
> sCommandline = Command()
>
> If sCommandline = "" Then
> Exit Sub
> End If
>
> aCommand() = Split(sCommandline, " ")
> If aCommand(0) = "" Or aCommand(0) = "" Then
> Exit Sub
> End If
>
> sCurrentFolder = aCommand(0)
> sChangeFrom = aCommand(1)
> sChangeTo = aCommand(2)
>
> 'Rename filerne rekursivt gemmen bibliotekerne
>
> Call ChangeFileInLib(sCurrentFolder)
>
> GoTo Exit_Sub
>
> Error_Handler:
> MsgBox Err.Description
>
> Exit_Sub:
> Set BMIVBFILE = Nothing
> Set BMIFILE = Nothing
>
> MsgBox "Operation Completed", vbInformation, "Change"
> End Sub
>
> Private Sub ChangeFileInLib(sCurrentFolder As String)
>
> On Error Resume Next
>
> Dim aSubFolder() As String
> Dim aFileSource() As String
> Dim I As Integer
> Dim J As Integer
>
> Form1.lblCurrentLib = sCurrentFolder
> Form1.Refresh
>
> 'Hent alle subfolder
> Call BMIVBFILE.SubDirsToArray(sCurrentFolder, aSubFolder(), True,
True)
>
> 'Læg alle filer i array
> aFileSource = MoveFilesToArray(sCurrentFolder)
>
> 'Omdøb for hver fil i nuværende bib.
> For I = LBound(aFileSource) To UBound(aFileSource)
> Call ChangeFile(sCurrentFolder & aFileSource(I))
> Next I
>
> 'Kald rekursivt for hver underbibliotek i nuværende bib.
> For J = LBound(aSubFolder) To UBound(aSubFolder)
> 'MsgBox "NEXT ChangeFileInLib: " & sCurrentFolder & aSubFolder(J)
>
> Call ChangeFileInLib(sCurrentFolder & aSubFolder(J))
> Next J
> End Sub
>
> Private Function MoveFilesToArray(sCurrentFolder As String) As Variant
>
> On Error Resume Next
>
> 'Declarations
> Dim BMIVBFILE As New BMIPROC.modVBFileDisk
> Dim aFile() As String
>
> 'Hent alle filer i folderen
> Call BMIVBFILE.FilesToArray(sCurrentFolder, True, True, aFile)
>
> 'Returner array
> MoveFilesToArray = aFile
> End Function
>
>
>
> Private Sub ChangeFile(sFile As String)
>
> Dim sNewFile As String
> Dim sFilePath As String
> Dim sFileName As String
> Static nChangeCount As Integer
>
> 'Test
> Debug.Print sFile & ":" & InStr(1, sFile, sChangeFrom)
>
> If InStr(1, sFile, sChangeFrom) > 0 Then
> nChangeCount = nChangeCount + 1
> Form1.lblChangeCount.Caption = nChangeCount
> End If
>
> Form1.lblCurrentFile.Caption = sFile
> Form1.Refresh
>
> 'Gem path og filnavn
> sFilePath = BMIFILE.ExtractPath(sFile, True)
> sFileName = BMIFILE.ExtractFile(sFile)
>
> 'Ændre kun filnavn store og små bogstaver
> sFileName = Replace(sFileName, sChangeFrom, sChangeTo)
> sFileName = Replace(sFileName, UCase(sChangeFrom), sChangeTo)
>
> 'Gem nyt navn
> sNewFile = sFilePath + sFileName
>
> 'Rename the current file
> Name sFile As sNewFile
>
> End Sub
>
>
> ahj@bminet.dk (Allan) wrote in message
news:<a9d9a699.0107060440.18284a97@posting.google.com>...
> > Hej Alle
> >
> > Jeg har lavet et lille program der rekursivt finder biblioteker og
> > underbiblioteker..
> >
> > Jeg bruger et rekursivt kald til at trave igennem alle biblioteker. Jeg
> > laver en exe-fil og herefter kører programmet, men virker det ikke. ex:
> > c:\test
> > - a
> > - aa
> > - b
> > - c
> > - ca
> >
> > c:\test c:\test\a og c:\test\aa bliver gennemgået men ikke c:\test\b
osv.
> >
> > Humlen er at programmet virker når jeg kører programmet i VB, men ikke
når
> > jeg kører det som en exe-fil.
> >
> > Håber i forstår hvad jeg mener!
| |
|
|