Avatar billede speedo Nybegynder
18. januar 2004 - 00:25 Der er 5 kommentarer og
1 løsning

Låser mit porgram

Når jeg dl en, fil fra nettet via mit prog. Så låser den sig, ind til den er færdig med at downloade!!!

Her er min kode, håber i forstår hvad jeg mener :D

Private Declare Function URLDownloadToFile Lib "urlmon" _
                          Alias "URLDownloadToFileA" ( _
                          ByVal pCaller As Long, _
                          ByVal szURL As String, _
                          ByVal szFileName As String, _
                          ByVal dwReserved As Long, _
                          ByVal lpfnCB As Long) As Long

Public Sub DownloadFile(ByVal strURL As String, ByVal strSave As String)
  Call URLDownloadToFile(0&, strURL, strSave, 0&, 0&)
End Sub

Private Sub Form_Load()
  Call DownloadFile("http://xxx.xxx.xxx.xxx/HL2DEMO.exe", "C:\HL2DEMO.exe")
End Sub
Avatar billede speedo Nybegynder
18. januar 2004 - 00:58 #1
Det er noget med en seperat tråd, eller noget !!!! :S
Avatar billede kabbak Professor
18. januar 2004 - 01:48 #2
Man plejer at bruge DoEvents, for at kunne lave noget,mens den kører i en løkke, jeg ved ikke om den kan bruges.

Eks.

For I = 1 to 1000
kode........
DoEvents
next

Public Sub DownloadFile(ByVal strURL As String, ByVal strSave As String)
DoEvents
  Call URLDownloadToFile(0&, strURL, strSave, 0&, 0&)
End Sub
Avatar billede danauktion Nybegynder
18. januar 2004 - 02:05 #3
URLDownloadToFile er en callback funktion, og synkroniseringen virker ikke altid som den skal - callback funktioner er altid (hos MS ihvertfald) lidt usikre.
Der er en tidsforskydning fra man returnerer fra kaldet til filen rent faktisk er downloadet og da filen er cached i en tempfile, så er filen også først tilstede på disken nogle fragmenter af et millisekund før du forventer det i koden.....
Derfor er der et extra loop og et check på at filen rent faktisk er på disken før jeg forlader rutinen.

Jeg ville gøre det således (det virker (!) da jeg benytter det i min kode til automatisk udskrift af pdf-filer på Internettet):

'Definitions
Public Enum URLDownloadErrConstants
  udErrAborted = &H80004004
  udErrDestFileExists = &H800C0001
  udErrInvalidUrl = &H800C0002
  udErrNoSession = &H800C0003
  udErrCannotConnect = &H800C0004
  udErrResourceNotFound = &H800C0005
  udErrObjectNotFound = &H800C0006
  udErrDataNotAvailable = &H800C0007
  udErrDownloadFailure = &H800C0008
  udErrAuthenticationRequired = &H800C0009
  udErrNoValidMedia = &H800C000A
  udErrConnectionTimeout = &H800C000B
  udErrInvalidRequest = &H800C000C
  udErrUnknownProtocol = &H800C000D
  udErrSecurityProblem = &H800C000E
  udErrCannotLoadData = &H800C000F
  udErrCannotInstantiateObject = &H800C0010
  udErrRedirectFailed = &H800C0014
  udErrRedirectToDir = &H800C0015
  udErrCannotLockRequest = &H800C0016
  ERROR_SUCCESS = 0
End Enum

Private Declare Function URLDownloadToFile Lib "urlmon" _
  Alias "URLDownloadToFileA" _
  (ByVal pCaller As Long, _
  ByVal szURL As String, _
  ByVal szFileName As String, _
  ByVal dwReserved As Long, _
  ByVal lpfnCB As Long) As URLDownloadErrConstants 'Long
...

'Module

Public Function DownloadFile(ByVal sURL As String, _
                            ByVal sLocalFile As String) As Boolean


  Dim lngRetVal As URLDownloadErrConstants 'Long
  Dim i As Long
 
  Dim Bok As Boolean
 
  'if the API returns ERROR_SUCCESS (0),
  'return True from the function
  lngRetVal = URLDownloadToFile(0&, _
                                    sURL, _
                                    sLocalFile, _
                                    0&, _
                                    0&)
    Debug.Print "URL " & " to " & sLocalFile
   
    If lngRetVal <> 0 Then
        Debug.Print "FEJL"
    End If
    i = 0
  DownloadFile = (lngRetVal = ERROR_SUCCESS)
  If lngRetVal = ERROR_SUCCESS Then
    Dim Mystr As String
    Mystr = LCase(Dir(sLocalFile))
    While (LCase(sLocalFile) <> LCase("c:\tmpfiles\pdf\" & Mystr)) And i < 100000
        i = i + 1
        Debug.Print "Wait " & i
        Mystr = Dir(sLocalFile)
    Wend
  End If
   
  DownloadFile = ((lngRetVal = ERROR_SUCCESS) And (LCase(sLocalFile) = ("c:\tmpfiles\pdf\" & LCase(Dir("C:\tmpfiles\PDF\" & Mystr)))))
  End Function

...
'kode

if DownloadFile("http://test.test.dk/somefile.pdf", _
                            "somefile.pdf")
Avatar billede speedo Nybegynder
18. januar 2004 - 02:32 #4
Kan man ikke bare skrive noget i stil med:

<StartTråd>
Kode
<Slut Tråd>
Avatar billede sjh Nybegynder
18. januar 2004 - 09:46 #5
URLDownloadToFile... vil låse dit program.. det kan du ikke gøre noget ved hvis du vil bruge "DownloadFile".

Men jeg har lavet en som ikke låser dit program...
http://home.get2net.dk/sjh/eksperten/453186/vbDownload.zip
Avatar billede speedo Nybegynder
19. januar 2004 - 00:06 #6
Låser stadig prog. , F.eks. Prøv at få en timer til at gøre noget imens den downloader !!!! :S
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester