powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ProgressBar и копирование файлов
10 сообщений из 10, страница 1 из 1
ProgressBar и копирование файлов
    #38089676
Подскажите код на 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
ProgressBar и копирование файлов
    #38089874
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мегапризрак,

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

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

В чем сложность то? Если нужно это делать в отдельном потоке, используй BackgroundWorker, для вас это будет идеальный класс для такой задачи.
...
Рейтинг: 0 / 0
ProgressBar и копирование файлов
    #38090357
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МегапризракПодскажите код на 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
ProgressBar и копирование файлов
    #38090396
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,

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

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

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

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

что бы сделать прогресс на каждый файл, ему надо копировать файл в отдельном потоке от формы, так как форма 1 поточная
...
Рейтинг: 0 / 0
ProgressBar и копирование файлов
    #38491639
REGON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь, ваш код мне очень помог.
Допилил прогресс.
Ошибок нет.
Код: 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
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ProgressBar и копирование файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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