| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Прогресс копирования файла(ов) |
| Автор: XavierElf 28.4.2007, 16:00 |
| Сделал прогу-апдейтер, которая проверяет сервер на наличие обновлений для другой программы. Возникла проблема с получением прогресса копирования файла. Ну нету вот у метода File.Copy(...) в нэймспэйсе System.IO возможности установить callback функцию, как это к примеру реализовано в WinAPI функцией CopyFileEx(...). Кто-нибудь знает, как можно получить этот прогресс в .NET без непосредственного вызова функций WinAPI? |
| Автор: Sartorius 28.4.2007, 16:16 |
| Замеряй размер dest-файла на таймере |
| Автор: XavierElf 28.4.2007, 16:24 | ||
Рационально ли это? Неужели нету методов асинхронного копирования с вызовом callback функций? |
| Автор: Stepan_Lameroff 28.4.2007, 17:36 |
| Думаю, Вам будет интересно. http://research.microsoft.com/research/pubs/view.aspx?tr_id=841 http://research.microsoft.com/research/downloads/Details/a6f86a1e-0278-4c72-9300-f747251c3bf0/Details.aspx |
| Автор: tol05 29.4.2007, 11:14 |
| Так сделай отдельный поток, запускай там File.Copy(), когда отработает, вызывай какую-нибудь функцию - она будет выполнять типа callback-а. Все асинхронные операции так же устроены, только поток среда сама создает. |
| Автор: Stepan_Lameroff 29.4.2007, 13:56 |
| tol05 а можно поподробнее, plz. Я всю жизнь думал (и делал), что прогресс копирования можно отобразить или используя WinAPI CopyFileEx, или ручками реализовывая копирование через FileStream. |
| Автор: tol05 29.4.2007, 15:30 |
| Сделал в двух рабочих потоках. Копирование и callback - без проблем, а вот с прогрессом на реальном кол-ве байтов - получается сложновато. Не учел я что File.Size тупо финальный размер показывает. Так что текущий размер копирующегося файла узнаю через Stream-ы. Так что пример наверное показывать не буду. |
| Автор: XavierElf 2.5.2007, 07:55 | ||||
В общем, конечно, ничто не мешает... Просто я хотел узнать, можно ли проблему решить средствами .NET Добавлено через 4 минуты и 40 секунд ЗЫ. Вопрос решён,тема закрыта. |