Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: А можно примерчик? Добавлено: 27.03.06 13:39  

Автор вопроса:  yxaxa
Как копировать файл по кускам? То есть хочу сделать 2 потока, 1 копирует файл по кускам. 2 рисует процент выолнения. Я тут еще подумаю сам, если придумаю отпишусь.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 yxaxa



Вопросов: 31
Ответов: 25
 Профиль | | #1 Добавлено: 27.03.06 14:32
Ну вот я чет в параметрах не рахобрался, потому не пашет. Где ошибка?
Dim fs As New IO.FileStream("C:\test.txt", IO.FileMode.Open) 'это то ЧТО писать бум
            Dim fs2 As New IO.FileStream("C:\streaming.txt", IO.FileMode.Create) 'это куда писать бум
            Dim abyBuffer(1) As Byte 'писать бум по 1 байту
            Dim iCount As Integer = fs.ReadByte 'смторим есть ли в файле байт
            Dim i As Integer = 0
            While iCount <> -1 'если файл еще не кончился, т.е. байт есть
                fs.Read(abyBuffer, i, 1) 'Читаем в буфер 1 байт с позиции i
                fs2.Write(abyBuffer, i, 1) 'пишем этот байт
                i += 1 'увеличиваем позицию на 1
                iCount = fs.ReadByte 'смотрим конец ли файла
            End While
            fs.Close()
            fs2.Close()

Ответить

Номер ответа: 2
Автор ответа:
 yxaxa



Вопросов: 31
Ответов: 25
 Профиль | | #2 Добавлено: 27.03.06 17:39
Все догнал я как по 1 байту копировать. Теперь буду пытаца 2 потока сделать (впервые). Возникнут вопросы напишу))) Хотя может все и в 1 потоке прекрасно получится.

ПС многа сюда заглядывали и не ответили. Если интересна вот что требовалось.
Dim fs As New IO.FileStream("C:\test.txt", IO.FileMode.Open)
            Dim fs2 As New IO.FileStream("C:\streaming.txt", IO.FileMode.Create)
            Dim abyBuffer(1) As Byte
            Dim i As Integer
            For i = 1 To fs.Length
                fs.Read(abyBuffer, 0, 1)
                fs2.Write(abyBuffer, 0, 1)
            Next
            fs.Close()
            fs2.Close()

Ответить

Номер ответа: 3
Автор ответа:
 yxaxa



Вопросов: 31
Ответов: 25
 Профиль | | #3 Добавлено: 27.03.06 19:05
Посмотрел я ето дело. Если по байту копировать файл размером даже 12 мб, то это превращается в муку. Обычно на копирование его уходит секунда. Тут же дело растянулось на минуты. Так что все таки кто-нить напишите пожалуйста как же ето делается?

Ответить

Номер ответа: 4
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #4
Добавлено: 27.03.06 20:10
КОпируй не по 1 байту, а по 1024.. или 65536.. Будет быстрее.

Ответить

Номер ответа: 5
Автор ответа:
 yxaxa



Вопросов: 31
Ответов: 25
 Профиль | | #5 Добавлено: 27.03.06 20:25
быстрее то конечно будет. Но все равно не идеально)))

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 27.03.06 20:31
А идеальней уже никак.

Ответить

Номер ответа: 7
Автор ответа:
 yxaxa



Вопросов: 31
Ответов: 25
 Профиль | | #7 Добавлено: 27.03.06 21:26
эх придется значить без прогресса жить, потому что такое медленное копирование что прям ужас.

Ответить

Номер ответа: 8
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #8
Добавлено: 29.03.06 22:52
Ну а если попробовать вот так....

Dim fs As New IO.FileStream("C:\test.txt", IO.FileMode.Open)
            Dim fs2 As New IO.FileStream("C:\streaming.txt", IO.FileMode.Create)
 Dim abyBuffer(fs.Length) As Byte
        Dim i As Integer
        'For i = 1 To fs.Length
        fs.Read(abyBuffer, 0, fs.Length)
        fs2.Write(abyBuffer, 0, fs.Length)
        'Next
        fs.Close()
        fs2.Close()

Ответить

Номер ответа: 9
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #9
Добавлено: 29.03.06 23:03
Сорри не прочитал про куски:)

В любом сучае, постарайся считать файл в буфер сразу весь(Если конечно он не огроменный;).

А если огроменный тогда разбивай на части. Собстно что Павел сказал.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам