Gjest Skrevet 25. mars 2009 Del Skrevet 25. mars 2009 (endret) Hei! Har et program som har en ListBox1 men mange verdier. Problemet er at jeg vil gjøre det litt ryddigere i koden hvis det er mulig. Og nå gjør jeg det slik: Dim wClient As Net.WebClient = New Net.WebClient If ListBox1.SelectedItem = "NAVN1" Then wClient.DownloadFile("http://www.linktilminside.com/filer/", "c:\" & ListBox1.SelectedItem & ".rar") End If Den vil laste ned filen med endelsen *.rar til C:\. Men når ListBox1 har 100 verdier og jeg skal sjekke om brukeren trykker på f.eks verdi nummer 42 med navnet: NAVN42 så skal den laste ned en fil som jeg har linket til. Finnes det en annen måte? Endret 27. mars 2009 av Gjest Lenke til kommentar
GeirGrusom Skrevet 26. mars 2009 Del Skrevet 26. mars 2009 Hva er egentlig poenget med den If linja? Hvis du skal laste ned en drøss med filer, er det en fordel å bruke FTP istedet for HTTP, siden du da ikke trenger å vite navnet på fila du er ute etter (du kan liste opp alle filer i en mappe) Eventuelt kan websiden din generere en XML side. Lenke til kommentar
GeirGrusom Skrevet 26. mars 2009 Del Skrevet 26. mars 2009 Joda, det er jeg klar over. Men HTTP har i utgangspunktet ikke noen mulighet til å liste opp filer eller mapper på serveren, og da er det en mulighet for websiden å generere en XML fil over filene på serveren som er mulig for programmet ditt å laste ned og bestemme hva programmet skal gjøre. XML filer er enkle å generere, og enkle å lese. Lenke til kommentar
Gjest Skrevet 26. mars 2009 Del Skrevet 26. mars 2009 Så det betyr har en XML fil på serveren. Programmet leser av den og legger til linker + navn på listbox-en? Lenke til kommentar
GeirGrusom Skrevet 26. mars 2009 Del Skrevet 26. mars 2009 Jeg tror kanskje du burde forklare hva du egentlig er ute etter. Lenke til kommentar
Gjest Skrevet 26. mars 2009 Del Skrevet 26. mars 2009 Har en del rar filer som ligger i en mappe. Trenger da et program som brukeren selv skal kunne velge hvilken fil han skal laste ned. F.eks i listbox1: navn1 navn2 navn3 navn4 OSV.... Og når brukeren klikker på navn1 så skal den laste ned navn1 med slik URL f.eks: http://minside.no/navn1.rar Så i steden for mange if setninger så tenkte jeg, er det en måte å gjøre dette enklere på? Lenke til kommentar
GeirGrusom Skrevet 26. mars 2009 Del Skrevet 26. mars 2009 Ok. Du må ha en kilde til filnavnene, dette kan løses på to måter (forsåvidt) Enten så lager du en .txt fil (eller lignende) som du opprettholder selv, eller så får du webserveren til å generere en liste. Deretter tar programmet ditt og laster ned denne filen fra serveren, og populerer for eksempel en listbox med disse filnavnene. Når dette er gjort, så laster du ned den valgte filen (ListBox1.SelectedItem) med WebClient. Da trenger du ingen if-er, og du kan tilogmed få webserveren til å vedlikeholde listen for deg. Lenke til kommentar
Gjest Skrevet 26. mars 2009 Del Skrevet 26. mars 2009 Hmm, min erfaring i VB er ikke veldig stor men kan noe. Forresten jeg har en MySQL database. Jeg vet hvordan jeg kobler med opp med vb.net, men kan jeg bruke det i steden for en tekstfil som inneholder alle navnene? Og hvordan får jeg printet ut informasjonen til listbox? Så hvis du vil skrive litt kode for meg eller formulere det enklere vill det vært flott! Takk for all hjelp hittil =) Lenke til kommentar
Alexen Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 (endret) Det var litt vanskelig å skjønne hva du er ute etter her ja. Du har en listbox med filnavn som du vil laste ned fra en url? Er det slik at du bare skal laste ned EN fil? dvs den som er merket i listboksen? isåfall kan du bruke følgende kode: Dim Baseurl As String = "http://www.linktilminside.com/filer/" If ListBox1.SelectedIndex > -1 Then ' Ingen vits i å gjøre noe hvis ingenting er valgt i listboxen. Dim filnavn As String = ListBox1.SelectedItem Dim wc As New WebClient wc.DownloadFile(Baseurl & filnavn, "D:\" & filnavn & ".rar") MsgBox("done") ' bør vel ha noe som varsler om at fila er ferdignedlasta End If ------- En ting du kan legge til er mulighet for å velge flere ting fra listboxen åsså laste ned alle de. Dessuten bør du ha med exception hvis noe går galt. @GeirGrusom: Det med xml er vel noe han kan bare kan gjøre dersom dette er en webside han har laget selv? Eller misforstår jeg noe. Edit: senkveld, småfull og skrivefeil Endret 27. mars 2009 av The_Viper@EFNET Lenke til kommentar
Gjest Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 Hei takk for et godt svar! Filene ligger i samme FTP mappe som heter "filer" uten "" Så hvis brukeren velger: Navn1 Så henter den en fil med det navnet i FTP mappen. Men hvis brukeren klikker på: Navn2 Så henter den en den annen fil med navnet i FTP mappen. Men jeg skal teste det du skrev! Takk =) BTW, tror du kan bruke XML for å så hente det inn til programmet. Vet du kan gjøre det med å finne ut om du har den siste versjonen av programmet eller ikke Lenke til kommentar
GeirGrusom Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 Selv hater jeg hardkoding, og dette er noe som fint kan gjøres uten å måtte vedlikeholde en txt fil eller en listbox. Hvis serveren din støtter noen form for scripting (helt sikker PHP) er det ikke noen stor kunst å få den til å kunne lage en liste. Men du sier det er FTP, og da har FTP en innebygget måte å få dette til uten å måtte gjøre noe slikt. Les om WebClient klassen og hvordan du kan bruke den med FTP (jeg har gjort noe lignende selv nemlig, men da var det bilder) Lenke til kommentar
Gjest Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 (endret) Takk det fungerte The_Viper@EFNET =D Bare at jeg må ha med hele filnavnet =( Er det mulighet å gjøre om filnavnet på en måte? Slik at jeg ikke må ha det lange navnet slik det er i min URL? Så listbox1 har navnet: navn1 mens på FTP mappen er det: navn1-80784 EDIT: @GeirGrusom: Takk for svar, skjønner at du hater det "/ Den støtter: PHP, HTML, ASP og det vanlige =) Endret 27. mars 2009 av Gjest Lenke til kommentar
GeirGrusom Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 (endret) Er det mulighet å gjøre om filnavnet på en måte? Slik at jeg ikke må ha det lange navnet slik det er i min URL? Så listbox1 har navnet: navn1mens på FTP mappen er det: navn1-80784 ListBox fyller listen med ToString() verdien av innholdet, så det jeg pleier å gjøre, er å lage en struct eller class for hver item Public Class UrlItem Private m_name As String Private m_uri As URI Public ReadOnly Property Name() As String Get() Return m_name End Get End Property Public ReadOnly Property Uri() As URI Get() Return m_uri End Get End Property Public Sub New(name As String, url As String) m_name = name m_uri = New Uri(url) End Sub Public Overrides Function ToString() As String Return m_name End Function End Class Public Sub PopulateList() ListBox1.Items.Add(New UrlItem("En fil", "Http://www.enfil.rar")) ' Husk å ta med Http eller Ftp, veldig viktig! End Sub Endret 27. mars 2009 av GeirGrusom Lenke til kommentar
Gjest Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 (endret) Takk for svar, men du sier at du trenger det for hver jeg item jeg har i listbox1? Da må jeg se etter andre løsninger =( EDIT: Kan gjøre slik: _Downloader.DownloadFileWithProgress(Baseurl & filnavn, txtDownloadTo.Text & "\" & navn.text & ".rar") uthevet er en tekstboks brukeren selv kan skrive inn navnet på *.rar filen men hadde vært greit med ferdig i ListBox1 fra før av "/ Endret 27. mars 2009 av Gjest Lenke til kommentar
GeirGrusom Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 Eneste grunnen det er vanskelig for deg, er fordi du hardkoder det! Dette hadde vært kjempeenkelt hvis du kunne lese dataene fra en tekstfil, da er det bare et par linjer med kode for å legge inn uendelig antall i listboxen. Lenke til kommentar
Gjest Skrevet 27. mars 2009 Del Skrevet 27. mars 2009 Eneste grunnen det er vanskelig for deg, er fordi du hardkoder det! Dette hadde vært kjempeenkelt hvis du kunne lese dataene fra en tekstfil, da er det bare et par linjer med kode for å legge inn uendelig antall i listboxen. Selvfølgelig kan alt ligge i en tekstfil for å så laste det inn til listboxen. Men uansett vil jeg støtte problemet der jeg må laste ned filen fordi jeg gjør slik: Dim Baseurl As String = "http://minside.com/filer" If Not IO.Directory.Exists(txtDownloadTo.Text) Then MessageBox.Show("Not a valid directory to download to, please pick a valid directory", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Else Try Dim filnavn As String = CStr(ListBox1.SelectedItem) _Downloader = New WebFileDownloader _Downloader.DownloadFileWithProgress(Baseurl & filnavn, txtDownloadTo.Text & "\" & navn.text & ".rar") Catch ex As Exception MessageBox.Show("Error: " & ex.Message) End Try Return End If Så altså den tar Baseurl og setter navnet som er i listboxen til den url'en så den blir slik: http://minside.com/filer/navn1.rar Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå