alle bestanden uit folder ophalen

Status
Niet open voor verdere reacties.

michaelvdnet

Gebruiker
Lid geworden
5 aug 2010
Berichten
177
hallo iedereen

ik zou graag met visual basic alle bestanden uit een folder willen downloaden maar ik weet niet hoe dat moet.
Code:
My.Computer.Network.DownloadFile
werkt in iedergeval niet want dat is alleen voor losse files.

het zijn +/- 200 bestanden en die wil ik er niet met de hand inzetten

heeft u een oplossing? top:thumb:
maar anders komen we er samen wel uit

M.V.G.
michael
 
Downloaden doe je van het internet naar je PC.
Waar staan die bestanden en waar moeten ze naar toe?
 
Dat kan met deze code:
[CPP]

Imports System
Imports System.IO
[/CPP]


Dim di As New DirectoryInfo(" LOCATIE ")

Dim fileArray As FileInfo() = di.GetFiles()

Dim ffi As FileInfo
For Each ffi In fileArray

DOWNLOAD CODE

Next ffi
 
Laatst bewerkt:
Al naar mijn voorbeelden gekeken? Staat behoorlijk wat informatie

Een google search naar "Visual basic" + "Download files" doet ook wonderen.

ik heb even wat gekeken op google en vond dit
Code:
  My.Computer.FileSystem.CopyDirectory

maar ik weet niet of dat ook voor over het internet geldt
 
In dat voorbeeld zet hij de bestandsnamen in een .txt bestand.
downloaden doet hij ze echte rniet.

er zijn een aantal manieren om te downloaden en ik zal ze even uitleggen:

importeer ook deze beide even:
[CPP]Imports System.Net
Imports System.IO[/CPP]

Vervolgens zet je onder public class form1 de volgende code:
[CPP]
Dim thread As System.Threading.Thread
Dim thread2 As System.Threading.Thread
Dim sizeinmbform As String = Nothing

Dim WithEvents WC As New WebClient
[/CPP]

onder het load event (dubbelklik op je form) plaats je hetvolgende:
[CPP] Me.CheckForIllegalCrossThreadCalls = False[/CPP]

en daarna gaan we naar de 2 manieren :D

Manier 1, geen MB status
Maak een private sub genaamde code aan zoals ik hier beneden doe:

[CPP]Private Sub code()
WC.DownloadFileAsync(New Uri("http://download.thinkbroadband.com/200MB.zip"), "file1.zip")
End Sub[/CPP]

(New Uri("http://download.thinkbroadband.com/200MB.zip"), "file1.zip")
Rood = download locati
Groen = nieuwe locatie op pc.

Zet vervolgens ook een progressbar op je form (om te laten zien hoe ver hij is).

plak dit onder het woord end sub van de private sub code()
[CPP]Private Sub WC_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles WC.DownloadProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub[/CPP]

Vervolgens voeg je 2 knoppen toe op knop 1 zet je het woord "start" en op 2 "stop".
Vervolgens voeg je de volgende code voor de knoppen bij:

[CPP] Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
thread = New System.Threading.Thread(AddressOf code)
thread.Start()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
WC.CancelAsync()

End Sub[/CPP]

Dit was manier 1, hierbij zal een multithreaded download worden gestart (programma blijft actief) maar er zal niet weergegeven worden hoeveel MB er al binnen is en hoeveel het totaal is.

Manier 2, Met MB counter + progressbar

voor manier 2 maken we allereerst 2 labels aan (bij mij genaamd label3 en label4) die positioneren we met een / ertussen net onder de 2de progressbar:
helpmij.jpg


dan maken we een private sub code2() toe, dit is de download code die gebruikt zal worden:
[CPP] Dim size2 As Integer
Dim wr2 As WebRequest
wr2 = WebRequest.Create("http://download.thinkbroadband.com/200MB.zip")
Dim webr2 As WebResponse = wr2.GetResponse
size2 = webr2.ContentLength
size2 = size2 / 1024
ProgressBar2.Maximum = size2

Label3.Text = size2 / 1024 & "MB"


Dim wc2 As New WebClient
WC.DownloadFile("http://download.thinkbroadband.com/200MB.zip", "file2.zip")
[/CPP]

Daarna voegen we een timer toe (timer1) en daarvan zetten we de interval op 1,en enabled op true. na een dubbelklik op de timer voeg je deze code toe:
[CPP] Try
Dim amount As Integer
If System.IO.File.Exists("file2.zip") Then
Dim o As New System.IO.FileInfo("file2.zip")
amount = o.Length
amount = amount / 1024
Dim amount2 As Integer = amount / 1024
Label4.Text = amount2 & "MB"
ProgressBar2.Value = amount
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try[/CPP]

daarna doen we de start knop weer programmeren met de volgende code:
[CPP] thread2 = New System.Threading.Thread(AddressOf code2)

thread2.Start()[/CPP]

Dit is dan het resultaat:
[video=youtube;i4hULNnimcw]http://www.youtube.com/watch?v=i4hULNnimcw&feature=youtu.be[/video]

Het visual basic project is te downloaden op www.mi-soft.nl of via de directe link: http://mi-soft.nl/?attachment_id=719
 
het voorbeeld dat ik gaf downloade wel :)
ik heb het zelf al een aantal keer geprobeert en ik ben al aardig op weg
 
Maar wordt het met jou artikel niet dubbel werk?
je moet eerst een .txt genereren en die wegschrijven op de harde schijf, daarna lees je van dat bestand om te downloaden?

dan kan je beter de files uitlezen met een loop, en elk item in die loop downloaden, dan hoef je niet een extra .txt bestand te schrijven / lezen.


Ook wil ik je nog aanraden het script gevonden op jou pagina aan te passen naar een multithreaded downloader, aangezien het met grote files nu zou vastlopen.


multithreaded & met loop doe je zo:

[CPP]Imports System.Net
Imports System.IO


Dim thread As System.Threading.Thread
Dim thread2 As System.Threading.Thread
Dim sizeinmbform As String = Nothing
Dim WithEvents WC As New WebClient

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.CheckForIllegalCrossThreadCalls = False
end sub

private sub code()

Dim di As New DirectoryInfo(application.startuppath & "\downloads\")

Dim fileArray As FileInfo() = di.GetFiles()

Dim ffi As FileInfo
For Each ffi In fileArray


DOWNLOAD CODE



Next ffi
end sub[/CPP]

en dan om de code() sub aan te roepen zet je deze code onder een event (of button):

[CPP]thread = New System.Threading.Thread(AddressOf code)
thread.Start()[/CPP]


Op die manier zal je programma niet blijven hangen ("programma reageert niet meer") als hij een bestand download dat niet meteen binnen is, het programma zal dan blijven reageren voor de gebruiker.
 
Zo hé, Mastermindzh. Jij maakt er wel werk van, hè? :P
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan