Могу ли я показать прогресс копирования файла, используя FileInfo.CopyTo () в .NET?

Я создал утилиту копирования в c # (.NET 2.0 Framework), которая копирует файлы, каталоги и рекурсивные подкаталоги и т. Д. В программе есть графический интерфейс, который показывает текущий файл, который копируется, текущий номер файла (последовательность), общее количество файлов для копирования и процент выполнения операций копирования. Также есть индикатор выполнения, основанный на текущем файле / общем количестве файлов.

Моя проблема связана с копированием больших файлов. Я не смог найти способ указать общий прогресс копирования большого файла (используя мою текущую структуру классов, которая использует метод FileInfo.CopyTo). В качестве обходного пути я разделил операции копирования файлов и отображения графического интерфейса для их собственных потоков и настроил визуальную подсказку, чтобы показать, что работа выполняется. По крайней мере, пользователь знает, что программа не заморожена и все еще копирует файлы.

Было бы лучше иметь возможность показывать прогресс на основе общего количества байтов или иметь какой-либо тип события, которое вызывается из метода FileInfo.CopyTo, который указывает общее количество байтов, скопированных из текущего файла.

Мне известно о свойстве FileInfo.Length, поэтому я уверен, что в моем собственном событии MacGuyver существует способ, основанный на этом и имеющий обработчик на стороне графического интерфейса для чтения обновлений (возможно, на основе проверки FileInfo. Свойство длины объекта назначения с использованием таймера определенного типа?).

Кто-нибудь знает способ сделать это, что я пропускаю. Если бы я мог избежать этого, я бы предпочел не переписывать свой класс, чтобы копировать байты в потоке и отслеживать его таким образом (хотя я думаю, что, возможно, застрял на этом пути).

Заранее спасибо

PS - Я пока застрял с платформой .NET 2.0, поэтому любое решение, для которого требуются функции, доступные только в> = 3.0, мне не подходит

PPS - я открыт для решений на любом языке .NET, не только на c #.

Ответы на вопрос(7)

Ваш ответ на вопрос