Avatar billede sjh Nybegynder
08. januar 2001 - 03:20 Der er 6 kommentarer og
1 løsning

Open 500 byte og send (Winsock)

Hvordan kan jeg ungåe at min Function sender mere en hvad filen fylder.

hvis filen er på 900 byte vil den sende 1000 byte og det må den ikke. HJÆLP MIG.

Function SendFile()
Dim Temp As String
Dim BlockSize As Long

    Open \"Filenavn.xxx\" For Binary Access Read As #1
    Do While Not EOF(1)
    BlockSize = 500
        Temp = Space$(BlockSize)
        Get 1, , Temp
        Winsock1.SendData Temp
        DoEvents
        Loop
Close #1
End Function
Avatar billede tdaugaard Nybegynder
08. januar 2001 - 03:23 #1
Sådan her:

Function SendFile()
    Dim Temp As String
    Dim BlockSize As Long

    Open \"Filenavn.xxx\" For Binary Access Read As #1
        Do
            BlockSize = 500
            If (LOF(1) - Loc(1)) < BlockSize Then BlockSize = (LOF(1) - Loc(1))
            Temp = Space$(BlockSize)
            Get 1, , Temp
            Winsock1.SendData Temp
            DoEvents
        Loop Until EOF(1)
    Close #1
End Function


Loc() returnere den nuværende position i filen du læser..
Avatar billede tdaugaard Nybegynder
08. januar 2001 - 03:23 #2
Forresten kan du rolig skifte

Dim BlockSize As Long

ud med

Dim BlockSize As Integer

da BlockSize jo ikke overstiger 32768
Avatar billede tdaugaard Nybegynder
08. januar 2001 - 03:26 #3
Forresten kan der godt være et problem med at Eof() aldrig bliver True, selvom filen faktisk er læst helt. Her er et lille \"bugfix\"

Function SendFile()
    Dim Temp As String
    Dim BlockSize As Long

    Open \"Filenavn.xxx\" For Binary Access Read As #1
        Do
            BlockSize = 500
            If (LOF(1) - Loc(1)) < BlockSize Then BlockSize = (LOF(1) - Loc(1))
            Temp = Space$(BlockSize)
            Get 1, , Temp
            Winsock1.SendData Temp
            DoEvents
        Loop Until EOF(1) Or (LOF(1) - Loc(1)) = 0
    Close #1
End Function
Avatar billede chris2k Nybegynder
08. januar 2001 - 09:51 #4
Block size kan da snilt komme til at overskride det. Det er bedre at være sikker.
Avatar billede tdaugaard Nybegynder
08. januar 2001 - 20:48 #5
chris2k:> fuck hvor er du bare for dum! lad være med at kommentere noget du ikke aner noget om!!!
Jeg gider ikke forklare hvorfor jeg vil bruger Integer istedet, for hvis du ikke kan læse det ud fra koden er det fordi du er for dum!

sjh:> forresten kan du godt sætte BlockSize = 500 uden for Loop\'et

Function SendFile()
    Dim Temp As String
    Dim BlockSize As Long

    Open \"Filenavn.xxx\" For Binary Access Read As #1
        BlockSize = 500

        Do
            If (LOF(1) - Loc(1)) < BlockSize Then BlockSize = (LOF(1) - Loc(1))
            Temp = Space$(BlockSize)
            Get 1, , Temp
            Winsock1.SendData Temp
            DoEvents
        Loop Until EOF(1) Or (LOF(1) - Loc(1)) = 0
    Close #1
End Function
Avatar billede sjh Nybegynder
08. januar 2001 - 23:05 #6
Tak tdaugaard.
det virker fint. ;)
Avatar billede tdaugaard Nybegynder
09. januar 2001 - 00:33 #7
sjh:> det var så lidt :-)
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