Страница: 1 |
Страница: 1 |
Вопрос: А можно примерчик?
Добавлено: 27.03.06 13:39
Автор вопроса: yxaxa
Как копировать файл по кускам? То есть хочу сделать 2 потока, 1 копирует файл по кускам. 2 рисует процент выолнения. Я тут еще подумаю сам, если придумаю отпишусь.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
yxaxa
Вопросов: 31
Ответов: 25
Профиль | | #1
Добавлено: 27.03.06 14:32
Ну вот я чет в параметрах не рахобрался, потому не пашет. Где ошибка?
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 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-сайт:
Профиль | | #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-сайт:
Профиль | | #6
Добавлено: 27.03.06 20:31
А идеальней уже никак.
Номер ответа: 7
Автор ответа:
yxaxa
Вопросов: 31
Ответов: 25
Профиль | | #7
Добавлено: 27.03.06 21:26
эх придется значить без прогресса жить, потому что такое медленное копирование что прям ужас.
Номер ответа: 8
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #8
Добавлено: 29.03.06 22:52
Ну а если попробовать вот так....
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-сайт:
Профиль | | #9
Добавлено: 29.03.06 23:03
Сорри не прочитал про куски
В любом сучае, постарайся считать файл в буфер сразу весь(Если конечно он не огроменный.
А если огроменный тогда разбивай на части. Собстно что Павел сказал.