---
title: "Läsa in en txt fil från nätet"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/79390-läsa-in-en-txt-fil-från-nätet"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "medialabs"
published: "2003-06-10T22:45:25.000Z"
updated: "2003-06-11T00:08:54.000Z"
replies: 18
views: 434
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/79390-läsa-in-en-txt-fil-från-nätet"
---

# Läsa in en txt fil från nätet

## #1 — medialabs, 2003-06-10T22:45Z

Hej!

Undrar om det går på något sätt läsa in en vanlig txt fil från en  webbsida Tex. (<http://www>) och sedan i programmet läsa in första raden där man kanske skriver 2.0.0 och sedan så visar programmet detta på en label tex. "Nu finns version: 2.0.0 tillgänglig."

Permalänk: https://www.webforum.nu/p/79390

## #2 — Nexus86, 2003-06-10T22:52Z

Det går faktiskt helt utan kontroller t.o.m. Med endast en Winsock eller liknande (som t.ex. winsock api som kanske är lite för komplicerat för dig?). Ska ge dig kod snart om ingen hinner före. :)

Permalänk: https://www.webforum.nu/p/1080708

## #3 — medialabs, 2003-06-10T22:53Z

> **Nexus86 skrev:**
>
> Det går faktiskt helt utan kontroller t.o.m. Med endast en Winsock eller liknande (som t.ex. winsock api som kanske är lite för komplicerat för dig?). Ska ge dig kod snart om ingen hinner före. :)

jag har inte tillgång till winsock control, sitter med learning edition av vb. så att du vet  :)

Permalänk: https://www.webforum.nu/p/1080709

## #4 — Nexus86, 2003-06-10T22:54Z

Okej. Har du provat med att ta winsockkontrollen från en annan dator och registrera den i windows med hjälp av regsvr32? ;)

Kan vara ett tips annars då detta är en bra kontroll!

Permalänk: https://www.webforum.nu/p/1080710

## #5 — medialabs, 2003-06-10T22:57Z

> **Nexus86 skrev:**
>
> Okej. Har du provat med att ta winsockkontrollen från en annan dator och registrera den i windows med hjälp av regsvr32? ;)
> 
> Kan vara ett tips annars då detta är en bra kontroll!

Har inte tillgång till någon annan dator som har den controllen. Men ska kolla hos en polare, Har du någon annan lösning till min fråga?   ;)

Permalänk: https://www.webforum.nu/p/1080711

## #6 — Nexus86, 2003-06-10T23:01Z

Går kanske med Init-kontrollen men är inte direkt en höjdare på den. Kan testa lite medan jag väntar på att någon ska svara på min tråd.

/r Skulle vara bra om du kunde skapa en fil åt mig att testa med. :)

Permalänk: https://www.webforum.nu/p/1080713

## #7 — niko, 2003-06-10T23:02Z

Det finns "internet"-API:er som ingår i alla Windowsversioner om man inte vill använda kontroller eller koda på winsock-nivå:

```
'Deklarationer
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const scUserAgent = "VB OpenUrl"
Private Const INTERNET_FLAG_RELOAD = &H80000000

Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, _
ByVal sProxyBypass As String, ByVal lFlags As Long) As Long

Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" _
(ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, _
ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

Private Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer

Private Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer

'Kod
Dim hOpen As Long, hOpenUrl, lNumberOfBytesRead As Long
Dim bDoLoop As Boolean, bRet As Boolean
Dim sReadBuffer         As String * 2048, sBuffer As String
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, "http://www.medialabs.nu/version.txt", vbNullString, 0, _
INTERNET_FLAG_RELOAD, 0)
bDoLoop = True
While bDoLoop
   sReadBuffer = vbNullString
   bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
   sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
   If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
sBuffer = Split(sBuffer, vbNewLine)(0)
'Första raden i version.txt ligger nu i sBuffer.
```

Permalänk: https://www.webforum.nu/p/1080714

## #8 — Nexus86, 2003-06-10T23:03Z

Sa det lite högre upp men gav ingen kod eftersom att jag inte kunde någon. :r

/r MITT 1111e inlägg!!! :birp

Permalänk: https://www.webforum.nu/p/1080715

## #9 — medialabs, 2003-06-10T23:10Z

\---

Permalänk: https://www.webforum.nu/p/1080716

## #10 — niko, 2003-06-10T23:13Z

> **Nexus86 skrev:**
>
> Sa det lite högre upp

Jaha, du menade **Inet**\-kontrollen när du skrev **Init**\-kontrollen?  ;)  Ja, den kontrollen är faktiskt en (onödig) wrappning kring funktionerna i wininet.dll.

> **medialabs skrev:**
>
> tackar, har en följefråga, kan man på något sätt kolla om användaren är ansluten till internet, om inte så ska inte den där funktionen köras.

Eh, ja? Du hade ju själv en funktion för just det i den [här](http://www.webforum.nu/showthread.php?s=&threadid=77686) tråden. Remember?

Permalänk: https://www.webforum.nu/p/1080717

## #11 — Nexus86, 2003-06-10T23:15Z

> **niko skrev:**
>
> Jaha, du menade Inet-kontrollen när du skrev Init-kontrollen? ;)

Nej. Jag menade precis det jag skrev: :)

> **jag skrev:**
>
> Med endast en Winsock eller liknande (som t.ex. winsock api som kanske är lite för komplicerat för dig?).

Permalänk: https://www.webforum.nu/p/1080719

## #12 — medialabs, 2003-06-10T23:17Z

> **niko skrev:**
>
> > **Nexus86 skrev:**
> >
> > Sa det lite högre upp
>
> 
> Jaha, du menade **Inet**\-kontrollen när du skrev **Init**\-kontrollen?  ;)  Ja, den kontrollen är faktiskt en (onödig) wrappning kring funktionerna i wininet.dll.
>
>
> > **medialabs skrev:**
> >
> > tackar, har en följefråga, kan man på något sätt kolla om användaren är ansluten till internet, om inte så ska inte den där funktionen köras.
>
> 
> Eh, ja? Du hade ju själv en funktion för just det i den [här](http://www.webforum.nu/showthread.php?s=&threadid=77686) tråden. Remember?

Nu ska vi inte vara sån  :e , fan det är dags för mig att gå och lägga mig snart.  :p

Permalänk: https://www.webforum.nu/p/1080720

## #13 — Nexus86, 2003-06-10T23:17Z

Okej då. Erkänner att jag har fel. Såg nu att du skrev att det fanns "Internet"-API:er och nånting om winsock och tänkte genast "Winsock"-API:er. :e

Permalänk: https://www.webforum.nu/p/1080721

## #14 — niko, 2003-06-10T23:24Z

> Nu ska vi inte vara sån

Fast om vi ska vara allvarliga så kollar faktiskt funktionen i den tråden bara om det finns en LAN-anslutning och inte ifall Internet är tillgängligt. Så om "Internet" inte finns eller om servern är nere så kommer du att få ett problem med att programmet "fryser" i cirka 30 s (TCP/IP-timeouten.)

Två förslag:

1\. Låt användaren själv manuellt sköta kontrollen genom en "check for updates"-knapp.
2\. Lägg funktonen i en separat bakgrundstråd så att huvudprogrammet inte "hänger" (krångligare).

Permalänk: https://www.webforum.nu/p/1080723

## #15 — medialabs, 2003-06-10T23:26Z

> **niko skrev:**
>
> > Nu ska vi inte vara sån
>
> 
> Fast om vi ska vara allvarliga så kollar faktiskt funktionen i den tråden bara om det finns en LAN-anslutning och inte ifall Internet är tillgängligt. Så om "Internet" inte finns eller om servern är nere så kommer du att få ett problem med att programmet "fryser" i cirka 30 s (TCP/IP-timeouten.)
> 
> Två förslag:
> 
> 1\. Låt användaren själv manuellt sköta kontrollen genom en "check for updates"-knapp.
> 2\. Lägg funktonen i en separat bakgrundstråd så att huvudprogrammet inte "hänger" (krångligare).

Tänkte just på att lägga in den i en msgbox så att användaren kan klicka på den.

Nu finns det en nu version av System Monitor, döpte den till System Information istället.  :p

Permalänk: https://www.webforum.nu/p/1080724

## #16 — niko, 2003-06-10T23:36Z

Fast nu råkade jag visst svamla en hel del däruppe. Internet-API verkar inte alls ha samma problem med timeouter som winsock-API:erna, så om Internet inte är tillgängligt (eller din server är nere) så märker du det på att *sBuffer* blir tom ganska direkt.

Fast det är nog ändå vara en bra idé att låta användaren själv sköta kontrollen: för modemanvändare så kan det ju vara irriterande om modemet börjar ringa upp utan att de vet varför.

> Nu finns det en nu version av System Monitor, döpte den till System Information istället.

Bra. Döp om "nätverkskort" till "nätverksinterface" också. Det mesta i listan är ju inte fysiska kort. (adapter\<\>card på engelska).

Permalänk: https://www.webforum.nu/p/1080729

## #17 — medialabs, 2003-06-10T23:41Z

> **niko skrev:**
>
> Fast nu råkade jag visst svamla en hel del däruppe. Internet-API verkar inte alls ha samma problem med timeouter som winsock-API:erna, så om Internet inte är tillgängligt (eller din server är nere) så märker du det på att *sBuffer* blir tom ganska direkt.
> 
> Fast det är nog ändå vara en bra idé att låta användaren själv sköta kontrollen: för modemanvändare så kan det ju vara irriterande om modemet börjar ringa upp utan att de vet varför.
> 
>
>
> > Nu finns det en nu version av System Monitor, döpte den till System Information istället.
>
> 
> Bra. Döp om "nätverkskort" till "nätverksinterface" också. Det mesta i listan är ju inte fysiska kort. (adapter\<\>card på engelska).

Ok, ska tänka på om jag ska byta namn på den.

Permalänk: https://www.webforum.nu/p/1080733

## #18 — krupp, 2003-06-11T00:05Z

Jag hittade en enkel kod som fungerar.

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 Function DownloadFile(URL As String, \_ 
   LocalFilename As String) As Boolean
   Dim lngRetVal As Long
   lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)        
   If lngRetVal = 0 Then DownloadFile = True
End Function

Private Sub Command1_Click()   
   ret = DownloadFile("http://www.server.com/version.txt", "c:\\version.txt")
End Sub

Permalänk: https://www.webforum.nu/p/1080738

## #19 — medialabs, 2003-06-11T00:08Z

> **krupp skrev:**
>
> Jag hittade en enkel kod som fungerar.
> 
> 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 Function DownloadFile(URL As String, \_ 
>    LocalFilename As String) As Boolean
>    Dim lngRetVal As Long
>    lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)        
>    If lngRetVal = 0 Then DownloadFile = True
> End Function
> 
> Private Sub Command1_Click()   
>    ret = DownloadFile("http://www.server.com/version.txt", "c:\\version.txt")
> End Sub

tack, tror att den där koden kommer till användning till en anna applikation som jag ska bygga ihop  :)

Permalänk: https://www.webforum.nu/p/1080739

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/79390-läsa-in-en-txt-fil-från-nätet
