Копирование файлов по локальной сети

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

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

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Копирование файлов по локальной сети

Сообщение 773FF » 10.08.2010 (Вт) 18:53

Необходимо по локальной сети (1 Гбит/сек) скопировать файлы c одного компьютера на другой.
Монтирую как диск расшаренную папку на удалённом компьютере так:
Код: Выделить всё
Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" _
( ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, _
ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer

    Public Declare Function WNetCancelConnection2 Lib "mpr" Alias "WNetCancelConnection2A" _
(ByVal lpName As String, ByVal dwFlags As Integer, ByVal fForce As Integer) As Integer

       <StructLayout(LayoutKind.Sequential)> _
   Public Structure NETRESOURCE
            Public dwScope As Integer
            Public dwType As Integer
            Public dwDisplayType As Integer
            Public dwUsage As Integer
            Public lpLocalName As String
            Public lpRemoteName As String
            Public lpComment As String
            Public lpProvider As String
       End Structure

   Public Const ForceDisconnect As Integer = 1
   Public Const RESOURCETYPE_DISK As Long = &H1

   Public Function MapDrive(ByVal DriveLetter As String, ByVal UNCPath As String) As Boolean
           
            Dim nr As NETRESOURCE
            Dim strUsername As String
            Dim strPassword As String

            nr = New NETRESOURCE
            nr.lpRemoteName = UNCPath
            nr.lpLocalName = DriveLetter & ":"
            strUsername = Nothing '(add parameters to pass this if necessary)
            strPassword = Nothing '(add parameters to pass this if necessary)
            nr.dwType = RESOURCETYPE_DISK

            Dim result As Integer
            result = WNetAddConnection2(nr, strPassword, strUsername, 0)

            If result = 0 Then
                Return True
            Else
                Return False
            End If
       End Function

   Public Function UnMapDrive(ByVal DriveLetter As String) As Boolean
       Dim rc As Integer
            rc = WNetCancelConnection2(DriveLetter & ":", 0, ForceDisconnect)

              If rc = 0 Then
                Return True
            Else
                Return False
            End If

       End Function


Далее копирую так:

Код: Выделить всё
My.Computer.FileSystem.CopyDirectory(ASourceName, ADestName, FileIO.UIOption.AllDialogs)
'ASourceName = "D:\MyBackups": ADestName = "F:\" (сетевой диск)


Копируется, но очень медленно. А если копировать в проводнике из локальной папки на тот же сетевой диск, то получается на порядок быстрее.
Почему так происходит?

773FF
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 07.02.2008 (Чт) 10:51

Re: Копирование файлов по локальной сети

Сообщение 773FF » 14.08.2010 (Сб) 14:30

Причину медленного копирования уяснил - сеть нестабильна. Проверил адаптеры, осталось заменить кабель (он у меня слишком длинный).

Но есть ещё один вопос: а как устроить копирование с буферированием? Т. e. как прикрутить буфер к Sream?
Я читал здесь про что-то похожее, но при копировании файлов на флешку. А вот найти не смог.


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

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

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

    TopList