Я создал утилиту копирования в С# (.NET 2.0 Framework), которая копирует файлы, каталоги и рекурсивные подкаталоги и т.д. Программа имеет графический интерфейс, который показывает текущий файл, который копируется, текущий номер файла (последовательность) общее количество копируемых файлов и процент выполненных операций копирования. Существует также индикатор выполнения, основанный на текущих файлах/файлах.
Моя проблема связана с копированием больших файлов. Мне не удалось найти способ указать общий ход копирования большого файла (используя мою текущую структуру классов, которая утилизирует метод FileInfo.CopyTo). В качестве обходного пути я разделил операции копирования файлов и графического интерфейса на свои собственные потоки и настроил визуальный сигнал, чтобы показать, что работа выполняется. По крайней мере, пользователь знает, что программа не была заморожена и все еще копирует файлы.
Было бы лучше показать прогресс, основанный на общем количестве байтов, или иметь какой-либо тип события, который запускается из метода FileInfo.CopyTo, который указывает общее количество байтов, скопированных из текущего файла.
Мне известно о свойстве FileInfo.Length, поэтому я уверен, что MacGuyver использует мое собственное событие, основанное на этом, и имеет обработчик на стороне GUI вещей, читающих обновления (возможно, на основе проверки свойство FileInfo.Length объекта назначения с использованием некоторого типа таймера?).
Кто-нибудь знает, как это сделать, что я пропускаю. Если я смогу избежать этого, я бы предпочел не переписывать свой класс, чтобы копировать байты через поток и отслеживать его таким образом (хотя я думаю, что мог бы застрять в этом маршруте).
Спасибо заблаговременно
PS - Я привязан к платформе .NET 2.0, поэтому любое решение, которое требует функций, доступных только в >= 3.0, для меня не является вариантом.
PPS - я открыт для решений в любом разнообразии .NET, а не только С#.