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