Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ProgressBar и копирование файлов / 10 сообщений из 10, страница 1 из 1
23.12.2012, 15:42
    #38089676
ProgressBar и копирование файлов
Подскажите код на VB.net для копирования каталога с файлами с отображением хода копирования в ProgressBarе, при условии что файлы в каталоге большого объема, а так же имеются подкаталоги

На форуме нашел код для копирования одного файла.:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
 Private Sub CopyFile(ByVal sSourceFile As String, ByVal sDestinationFile As String)

        Dim iBuffSize As Int16 = 4096
        Dim iNumBytesRead As Int16
        sSourceFile = sSourceFile.Replace("\\", "\")
        sDestinationFile = sDestinationFile.Replace("\\", "\")
        Dim oInStream As System.IO.FileStream = File.OpenRead(sSourceFile)
        Dim oOutStream As System.IO.FileStream = File.Open(sDestinationFile, FileMode.OpenOrCreate)
        Dim oBuffer(iBuffSize) As Byte
        m_oProgressBar.Maximum = CInt(oInStream.Length / 1024)
        m_oProgressBar.Value = 0
        Application.DoEvents()
        iNumBytesRead = CShort(oInStream.Read(oBuffer, 0, iBuffSize))
        While iNumBytesRead > 0
            oOutStream.Write(oBuffer, 0, iNumBytesRead)
            iNumBytesRead = CShort(oInStream.Read(oBuffer, 0, iBuffSize))
            If Not m_oProgressBar.Value + iBuffSize > oInStream.Length Then
                m_oProgressBar.Value += iBuffSize / 1024
            Else
                m_oProgressBar.Value = CInt(oInStream.Length / 1024)
            End If
            If Not m_oProgressBar.Value + 1 > m_oProgressBar.Maximum Then
                m_oProgressBar.Value += 1
            Else
                m_oProgressBar.Value = m_oProgressBar.Maximum
            End If
            Application.DoEvents()
        End While
        oOutStream.Flush()
        oInStream.Flush()
        oInStream.Close()
        oOutStream.Close()
       
    End Sub



Как реализовать для каталога с файлами во внешнем потоке?
...
Рейтинг: 0 / 0
23.12.2012, 19:57
    #38089874
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar и копирование файлов
Мегапризрак,

в чем именно у тебя сложность?
...
Рейтинг: 0 / 0
23.12.2012, 21:54
    #38089955
ProgressBar и копирование файлов
Не корректно работает. При 100% прогресс баре, продолжает копирование файлов
...
Рейтинг: 0 / 0
24.12.2012, 07:18
    #38090148
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar и копирование файлов
Мегапризрак,

варианта 2:
подсчитать количество файлов и считать из этого % выполнения, либо считать объем файлов, что займет чуть больше времени перед стартом копирования. После этого уже считать исходя из объема. Идеальный вариант комбинировать это, а объем все файлов считать в процессе копирования файлов.

В чем сложность то? Если нужно это делать в отдельном потоке, используй BackgroundWorker, для вас это будет идеальный класс для такой задачи.
...
Рейтинг: 0 / 0
24.12.2012, 11:33
    #38090357
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar и копирование файлов
МегапризракПодскажите код на VB.net для копирования каталога с файлами с отображением хода копирования в ProgressBarе, при условии что файлы в каталоге большого объема, а так же имеются подкаталоги

На форуме нашел код для копирования одного файла.:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
 Private Sub CopyFile(ByVal sSourceFile As String, ByVal sDestinationFile As String)

        Dim iBuffSize As Int16 = 4096
        Dim iNumBytesRead As Int16
        sSourceFile = sSourceFile.Replace("\\", "\")
        sDestinationFile = sDestinationFile.Replace("\\", "\")
        Dim oInStream As System.IO.FileStream = File.OpenRead(sSourceFile)
        Dim oOutStream As System.IO.FileStream = File.Open(sDestinationFile, FileMode.OpenOrCreate)
        Dim oBuffer(iBuffSize) As Byte
        m_oProgressBar.Maximum = CInt(oInStream.Length / 1024)
        m_oProgressBar.Value = 0
        Application.DoEvents()
        iNumBytesRead = CShort(oInStream.Read(oBuffer, 0, iBuffSize))
        While iNumBytesRead > 0
            oOutStream.Write(oBuffer, 0, iNumBytesRead)
            iNumBytesRead = CShort(oInStream.Read(oBuffer, 0, iBuffSize))
            If Not m_oProgressBar.Value + iBuffSize > oInStream.Length Then
                m_oProgressBar.Value += iBuffSize / 1024
            Else
                m_oProgressBar.Value = CInt(oInStream.Length / 1024)
            End If
            If Not m_oProgressBar.Value + 1 > m_oProgressBar.Maximum Then
                m_oProgressBar.Value += 1
            Else
                m_oProgressBar.Value = m_oProgressBar.Maximum
            End If
            Application.DoEvents()
        End While
        oOutStream.Flush()
        oInStream.Flush()
        oInStream.Close()
        oOutStream.Close()
       
    End Sub




Как реализовать для каталога с файлами во внешнем потоке?

я фигею, а чем стандартный метод File.Copy не угодил? может вы думете, что вручную скопируете лучше и быстрее?
...
Рейтинг: 0 / 0
24.12.2012, 11:54
    #38090396
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar и копирование файлов
pation,

ему нужно, что бы прогресс бар работал для каждого байта, то есть если вы копируйте 500 файлов по 2 байта каждый, то можно было бы получить 0.1% процент операции. Такие дела. Нанотехнологии в действии. А ресурсозатраты дело десятое.
...
Рейтинг: 0 / 0
24.12.2012, 13:47
    #38090610
ProgressBar и копирование файлов
Roman MejtesМегапризрак,

варианта 2:
подсчитать количество файлов и считать из этого % выполнения, либо считать объем файлов, что займет чуть больше времени перед стартом копирования. После этого уже считать исходя из объема. Идеальный вариант комбинировать это, а объем все файлов считать в процессе копирования файлов.

В чем сложность то? Если нужно это делать в отдельном потоке, используй BackgroundWorker, для вас это будет идеальный класс для такой задачи.

Такой вариант не подойдет, т.к. имеются файлы большого размера.
Прогресс бар будит тупо висеть на одном месте при копировании большого файла.
...
Рейтинг: 0 / 0
24.12.2012, 13:50
    #38090621
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar и копирование файлов
МегапризракТакой вариант не подойдет, т.к. имеются файлы большого размера.
Прогресс бар будит тупо висеть на одном месте при копировании большого файла.
проблема не стоит и выйденного яйца. ну повесте к бару ещё и количесво скопированных байт.
или как в фаре, два прогресса. один общий , другой на каждый файл.
...
Рейтинг: 0 / 0
24.12.2012, 14:04
    #38090661
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar и копирование файлов
beg-in-er,

что бы сделать прогресс на каждый файл, ему надо копировать файл в отдельном потоке от формы, так как форма 1 поточная
...
Рейтинг: 0 / 0
06.12.2013, 13:14
    #38491639
REGON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ProgressBar и копирование файлов
Спасибо за помощь, ваш код мне очень помог.
Допилил прогресс.
Ошибок нет.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 Private Sub CopyFile(ByVal sSourceFile As String, ByVal sDestinationFile As String)
        Dim iBuffSize As Integer = 20480
        Dim iNumBytesRead As Int16
        sSourceFile = sSourceFile.Replace("\\", "\")
        sDestinationFile = sDestinationFile.Replace("\\", "\")
        Dim oInStream As System.IO.FileStream = File.OpenRead(sSourceFile)
        Dim oOutStream As System.IO.FileStream = File.Open(sDestinationFile, FileMode.OpenOrCreate)
        Dim oBuffer(iBuffSize) As Byte
        Progress.Maximum = CInt(oInStream.Length / 1024)
        Progress.Value = 0
        iNumBytesRead = CShort(oInStream.Read(oBuffer, 0, iBuffSize))
        While iNumBytesRead > 0
            oOutStream.Write(oBuffer, 0, iNumBytesRead)
            iNumBytesRead = CShort(oInStream.Read(oBuffer, 0, iBuffSize))
            Progress.Value += iNumBytesRead / 1024
            If oOutStream.Length = oInStream.Length Then
                Progress.Value = Progress.Maximum
                Exit While
            End If
        End While
        oOutStream.Flush()
        oInStream.Flush()
        oInStream.Close()
        oOutStream.Close()
    End Sub
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ProgressBar и копирование файлов / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]