Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Копирование из лок. сети Добавлено: 23.04.04 18:23  

Автор вопроса:  AV | Web-сайт: www.av.folder-pro.net
Помогите, пожалуйста, нужна помощь. Те у кого есть сеть наверное знают, что если качать какой-нибудь файл больших размеров (например фильм), то при малейшем сбое стандартное Виндосовское копирование дохнет, и приходится потом начинать все сначала... Как же можно организовать продолжение копирования с того места где произошел обрыв на VB?

Ответить

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

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 23.04.04 19:01

Вообще можно копировать не полностью файл за раз, а по-частям, а потом, если, скажем, файл куда нужно копировать уже есть, то узнать его размер, в файле источнике установить "рамку, позицию считывания" (как только в литературе это не обзывают), в общем воспользоваться "Seek" и установить нужную позицию для считывания, и опять же по частям скопировать "остаток" файла

Ответить

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



Вопросов: 28
Ответов: 48
 Web-сайт: www.av.folder-pro.net
 Профиль | | #2
Добавлено: 23.04.04 21:38
Спасибо sne за идею, буду пробовать!

Ответить

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



Вопросов: 28
Ответов: 48
 Web-сайт: www.av.folder-pro.net
 Профиль | | #3
Добавлено: 23.04.04 22:32

Вобщем посидел я, подумал, сделал так:

Option Explicit
Dim i As Long

Public Sub FileCopy(SourceFile, DestFile)
Dim Bt As Byte

Open SourceFile For Binary Access Read As #1
Open ;DestFile For Binary Access Write As #2

For i = 1 To FileLen(SourceFile)
LabelResume:
    If VBA.Dir(SourceFile) <> "" Then
        Get #1, i, Bt
        Put #2, i, Bt
    Else
        Select Case MsgBox("Ошибка чтения файла. Продолжить?", vbCritical + vbYesNo)
        Case VBA.VbMsgBoxResult.vbYes
            GoTo LabelResume
        Case VBA.VbMsgBoxResult.vbNo
            Exit Sub
        End Select
    End If
    VBA.DoEvents
Next i

Close #2
Close #1
End Sub

Но так работает очень медленно, может кто-нибудь подскажет как сделать порции байтов побольше или ускорить этот процесс?

Ответить

Номер ответа: 4
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 23.04.04 23:08

нда :) по одному байту конечно же копировать не шустро получится :))

Попробуй объявить строчку, а потом strng = Space/String (кол-во байт кусочка), и использовать все теже Put/Get...

Ответить

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



Вопросов: 28
Ответов: 48
 Web-сайт: www.av.folder-pro.net
 Профиль | | #5
Добавлено: 24.04.04 20:21

А как мне можно считать из файла его какую-нибудь часть в порциях, например, от 0 до 10 000 байт, потом от 10 000 до 1 000 000 и т.д.

Ответить

Номер ответа: 6
Автор ответа:
 Vilya



ICQ: 232995216 

Вопросов: 12
Ответов: 63
 Web-сайт: нету
 Профиль | | #6
Добавлено: 25.04.04 02:49

Примерно так:

Размер порции зависит от длины переменной

Вот например порция в 1024 байт

Bt=Space(1024)

А дальше всё также

Можешь размер порции ещё больше сделать.

Ответить

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



Вопросов: 28
Ответов: 48
 Web-сайт: www.av.folder-pro.net
 Профиль | | #7
Добавлено: 25.04.04 11:17

Спасибо большое Vilya! Все получилось! :-)

Ответить

Страница: 1 |

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



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