Как разделить?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Как разделить?

Сообщение GPP » 16.11.2008 (Вс) 11:19

Здравствуйте! Необходимо разделить файл на 1024 байта... и потом эти байты передавать в сеть... Как передавать я знаю... А вот как разделить файл? К примеру я хочу последовательно читать по 1024 байта файла и отправлять... Как это можно осуществить? Сейчас я делаю так:
Код: Выделить всё
        Tcp.RemoteHost = "127.0.0.1"
        Tcp.RemotePort = 1111
        Tcp.Connect()
        Dim File As New FileStream("C:\1.jpg", FileMode.Open, FileAccess.Read)
        Dim buff(File.Length) As Byte
        File.Read(buff, 0, buff.Length)
        Tcp.SendData(buff)
        Tcp.Disconnect()


Так все работает... НО! Если файл большой, то он весь загружается в массив, мне это не нужно. Я хочу читать файл по 1024 байта не загружая весь файл в массив. Заранее огромное человеческое спасибо!
GPP(c) Gorlo Pavel Programming

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Как разделить?

Сообщение Nord777 » 16.11.2008 (Вс) 13:19

Код: Выделить всё
    Const BufLen As Integer = 1024
    Dim BytesRead As Integer
    Dim File As New FileStream("C:\1.jpg", FileMode.Open, FileAccess.Read)
    Dim buff(BufLen - 1) As Byte

    BytesRead = File.Read(buff, 0, BufLen)
    Do While BytesRead <> 0
      '** здесь посылаешь данные
      BytesRead = File.Read(buff, 0, BufLen)
    Loop
    File.Close()
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Re: Как разделить?

Сообщение GPP » 16.11.2008 (Вс) 14:30

Спасибо огромное!
GPP(c) Gorlo Pavel Programming

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Re: Как разделить?

Сообщение GPP » 17.11.2008 (Пн) 5:56

Все очень хорошо! Но проблема вот в чем... Файл читается по 1024 байта... Получается что в конце передачи записывается лишние 1024 байта... Как сделать так что бы предавалось ровно столько сколько весит файл? Спасибо!
GPP(c) Gorlo Pavel Programming

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Re: Как разделить?

Сообщение GPP » 17.11.2008 (Пн) 7:53

Так... вроде сам разобрался :) Но возникла другая проблема... Я на форме разместил ProgressBar... Но в процессе отсылки данных форма "зависает". Как избавиться от этого ненужного "эффекта"? Спасибо.

p.s: вот код

Код: Выделить всё
        Tcp.RemoteHost = "127.0.0.1"
        Tcp.RemotePort = 1111
        Tcp.Connect()
        Dim BufLen As Integer = 2048
        Dim BytesRead As Integer
        Dim File As New FileStream("C:\Setup.exe", FileMode.Open, FileAccess.Read)
        Dim buff(BufLen - 1) As Byte
        Dim bytessend As Integer
        PB.Maximum = File.Length

        Do While bytessend <> File.Length

            BytesRead = File.Read(buff, 0, BufLen)

            Tcp.SendData(buff)
            bytessend += BytesRead
            PB.Value = bytessend
            If File.Length - bytessend < BufLen Then
                ReDim buff(File.Length - bytessend - 1)
                BytesRead = File.Read(buff, 0, File.Length - bytessend)
                Tcp.SendData(buff)
                Exit Do
            End If
        Loop
        File.Close()

        Tcp.Disconnect()
GPP(c) Gorlo Pavel Programming

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Re: Как разделить?

Сообщение GPP » 17.11.2008 (Пн) 7:58

Все... Разобрался :) Application.DoEvents :D
GPP(c) Gorlo Pavel Programming


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList