23. august 2005 - 20:40Der er
21 kommentarer og 1 løsning
FSO.CreateFolder giver mig problemer
Jeg kæmper med et program som tager livet af mig, problemet nu er at når Sti = tom umiddelbar sletter NySti så bliver jeg nød til at CreateFolder igen... Nu,det som jeg aldrig har oplevet før, er at når jeg stepper med F8 så opfører den sig ordentlig men når den bare kører med F5 så overser den If FSO.FolderExists og det er ikke så godt,er der nogen som kan give mig en forklaring? eller bedre en løsning?
'Word Set FSO = CreateObject("Scripting.FileSystemObject") Sti = "c:\sala-escars copies de seguritat\Fra sala-escars\Til Benta\Word" NySti = "c:\Sala-Escars Copies de Seguritat\Fra Sala-Escars\Til Enric\Word" Command1.Caption = "Espera un moment...O==>S..Winword..." RetVal = Shell("xcopy " & Chr(34) & Sti & Chr(34) & " " & Chr(34) & NySti & Chr(34) & " /S /Y", 0) If FSO.FolderExists("c:\Sala-Escars Copies de Seguritat\Fra Sala-Escars\Til Enric\Word\") _ Then GoTo Nest5 FSO.CreateFolder NySti Nest5: Set FSO = Nothing Command1.Caption = "La transferencia esta feta"
Det må være noget med at processen ikke når at starte op inden koden går videre. Såvidt jeg husker, går shell-kommandoen videre uden at vente (da du i princippet starter en ny tråd i.o.m. du starter en ny process - og shell returnerer ligeså snart processen er startet). Når du stepper igennem koden får processen tid til at starte, men det gør den ikke når du bare kører...
Jeg kan ikke huske hvordan det var man kunne vente på en process, men er ret sikker på at det krævede nogle declares af funktioner fra system-dll'er...
Ja, du kan lave en declare til sleep-funktionen i en anden dll :)
For real! Så tror jeg ikke det ville være den rigtige måde at gøre tingene på, for du vil aldrig være sikker på at du har ventet længe nok (eller brugeren vil blive træt af at vente længe nok til at dit program er interessant nok at bruge :)). Jeg mener du skal finde en eller anden funktionalitet der hedder noget med WaitForSingleProcess eller noget i den stil... kan ikke huske det - det er 5 år siden jeg sidst har arbejdet seriøst med VB 6 :(
I dette tilfælde kan du selv lægge et svar og markere os begge, så deler vi lige over. Der er vist noget med at man kan lave specielle fordelinger af point ved at trykke på et link på pointsiden... men bare læg et svar selv og tildel og begge point, så burde det være nok.
Jeg håber alligevel at du tager et kig på det link jeg fandt, for jeg tror du mere eller mindre kan copy/paste det ind i din kode og bruge det (du skal jo bare vente på at xcopy bliver færdig, som jeg har forstået dit problem).
I den class eller form hvor du udfører kaldet indsætter du denne kode:
Const SYNCHRONIZE = &H100000 Const INFINITE = &HFFFF 'Wait forever Const WAIT_OBJECT_0 = 0 'The state of the specified object is signaled Const WAIT_TIMEOUT = &H102 'The time-out interval elapsed & the object’s state 'is nonsignaled.
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _ ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
og så skulle jeg mene at din kode skal se således ud:
Dim lHnd As Long Dim lRet As Long
Set FSO = CreateObject("Scripting.FileSystemObject") Sti = "c:\sala-escars copies de seguritat\Fra sala-escars\Til Benta\Word" NySti = "c:\Sala-Escars Copies de Seguritat\Fra Sala-Escars\Til Enric\Word" Command1.Caption = "Espera un moment...O==>S..Winword..." RetVal = Shell("xcopy " & Chr(34) & Sti & Chr(34) & " " & Chr(34) & NySti & Chr(34) & " /S /Y", 0)
If RetVal <> 0 Then 'Get a handle to the shelled process. lHnd = OpenProcess(SYNCHRONIZE, 0, RetVal) 'If successful, wait for the application to end and close the handle. If lHnd <> 0 Then lRet = WaitForSingleObject(lHnd, INFINITE) CloseHandle (lHnd) End If End If
If FSO.FolderExists("c:\Sala-Escars Copies de Seguritat\Fra Sala-Escars\Til Enric\Word\") Then GoTo Nest5 End If
FSO.CreateFolder NySti
Nest5: Set FSO = Nothing Command1.Caption = "La transferencia esta feta"
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.