C# Downloaden van meedere bestanden

Status
Niet open voor verdere reacties.

Diigii

Gebruiker
Lid geworden
18 jan 2009
Berichten
7
Hey mensen, ik had een vraagje..

Ik zal van te voren zeggen dat ik wel iets verstand heb van programmeren, maar ik ben geen ster. Het zit dus zo. Ik speel een game, ArmA II en daar heb je een zombie mod. Je moet daar dus een paar bestanden voor downloaden om de mod te spelen. Iemand had dus een automatische updater gemaakt, maar die werkt niet helemaal. Dus ik dacht ik probeer ook iets te maken.

Bij het opstarten van het programma haal ik de logische drives op. (C:\, D:\ etc..) Dit doe ik omdat ik heb pad wil hebben waar de installatie van het spel staat, dit heb je nodig om de mod te installeren. Dit werkt perfect. Dan vul ik een combobox met de logische drives. Zodra iemand dus zijn schijf klikt, het maakt niet uit welke, krijg je een melding of het wel of niet goed is. Zodra je de goede drive hebt gekozen zegt het programma dat je hem hebt gevonden. Om te beginnen heb ik een knop gemaakt voor de mensen die de mod nog niet hebben geinstalleerd.

Als je dan op de knop 'Install DayZ mod' drukt kijkt hij of de mappen al bestaan die aan moet worden gemaakt, als dit niet het geval is gaat hij deze automatisch aanmaken. Dit lukt ook. Maar het probleem zit hem nu in het downloaden van bestanden. Ik heb dus een website waar de mods op staan: http://cdn.armafiles.info/

Ik moet de .rar bestanden dus van deze website hebben en deze moeten in de map worden geplaatst die ik had aangemaakt. Het is mij gelukt om 1 bestand te downloaden, maar dit komt alleen doordat ik de orginele naam gebruik van het bestand. Dus zodra er een update komt van de mod, kan hij deze niet meer downloaden.

Heeft iemand verstand om meerdere bestanden van een website te halen (http://cdn.armafiles.info/) en deze dan in de map te plaatsen. De bestanden moeten eigenlijk ook uitgepakt te worden, maar dat is nog niet nodig. Ik wil graag eerst het downloaden voor elkaar hebben. Ik zal hieronder neerzetten wat ik zo'n beetje heb.

Met het automatisch downloaden krijg ik niets voor, het is ook geen opdrachten :P Ik wil het puur maken omdat ik er eigenlijk zin in had ;)

Als er vragen zijn, hoor ik het graag :)Bekijk bijlage code.txtBekijk bijlage DayZUpdater.zip
 
High level ideen waar je naar kunt kijken:

1) als het goed is staat de installatie locatie van het spel in de registry. Het zou dus niet nodig hoeven zijn om de gebruiker handmatig te laten zoeken (hoewel het natuurlijk altijd een optie kan zijn

2) maak een bestand aan met XML of gewoon text op de site met de juiste namen om te downloaden. Download eerst dat bestand en download vervolgens de file uit dat bestand.

Als 2) niet kan is het afhankelijk van de site. Als je geen listing kan maken van de files is het eenvoudigweg niet mogelijk. Mocht de site FTP ondersteunen kan het bijvoorbeeld met FTP.
 
Importeer eerst de volgende namespaces:

Code:
using System.Net;
using System.IO;
using System.Threading;

Om te voorkomen dat het programma vast loopt tijdens het downloaden, doen we het downloaden in een aparte thread. (System.Threading).
Plaats bijvoorbeeld deze code op een button:

Code:
Thread MyThread = new Thread(DownloadBestanden);
CheckForIllegalCrossThreadCalls = false;
MyThread.Start()

Deze code zal de functie 'DownloadBestanden' aanroepen in een aparte thread:

Code:
public void DownloadBestanden()
{
            string[] Urls = 
            { 
                "URL", 
                "URL",
                "URL"
            };
            foreach (string Url in Urls)
            {
                WebClient WClient = new WebClient();
                WClient.DownloadFile(Url, "C:\\lol.zip");
            }

}

Note: Houd er wel rekening mee dat door 'CheckForIllegalCrossThreadCalls' op 'false' te zetten. Je gewoon objecten die in een andere thread zijn aangemaakt kunt aanroepen.
Dit is 'unsafe threading' en eigenlijk 'slechte' code. Mijn voorbeeld code roept geen objecten aan die in een andere thread zijn aangemaakt.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan