Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прогресс копирования файла(ов) 
V
    Опции темы
XavierElf
Дата 28.4.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Сделал прогу-апдейтер, которая проверяет сервер на наличие обновлений для другой программы. Возникла проблема с получением прогресса копирования файла. Ну нету вот у метода File.Copy(...) в нэймспэйсе System.IO возможности установить callback функцию, как это к примеру реализовано в WinAPI функцией CopyFileEx(...). Кто-нибудь знает, как можно получить этот прогресс в .NET без непосредственного вызова функций WinAPI?
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
Sartorius
Дата 28.4.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



 Замеряй размер dest-файла на таймере smile 
PM MAIL ICQ   Вверх
XavierElf
Дата 28.4.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Цитата(Sartorius @ 28.4.2007,  16:16)
Замеряй размер dest-файла на таймере smile

Рационально ли это? Неужели нету методов асинхронного копирования с вызовом callback функций?
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
Naum
Дата 28.4.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Сомневаюсь, что рационально, но когда-то давно для проверки скорости сд-рома делал так, копировал по байтам smile. Т.е. создаешь dest-файл. Потом в цикле читаешь несколько байт из сорца и записываешь в дест. И всегда знаешь сколько уже скопировано.
Цитата(XavierElf @  28.4.2007,  17:00 Найти цитируемый пост)
как это к примеру реализовано в WinAPI функцией CopyFileEx(...)

А что мешает вызывать эту функцию?



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Stepan_Lameroff
Дата 28.4.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 9
Всего: 14



Думаю, Вам будет интересно.
Sequential File Programming Patterns and Performance with .NET
Source Code

Это сообщение отредактировал(а) Stepan_Lameroff - 28.4.2007, 17:43
PM MAIL   Вверх
tol05
Дата 29.4.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Так сделай отдельный поток, запускай там File.Copy(), когда отработает, вызывай какую-нибудь функцию - она будет выполнять типа callback-а.
Все асинхронные операции так же устроены, только поток среда сама создает.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Stepan_Lameroff
Дата 29.4.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 9
Всего: 14



tol05 а можно поподробнее, plz.
Я всю жизнь думал (и делал), что прогресс копирования можно отобразить
или используя WinAPI CopyFileEx, или ручками реализовывая копирование через FileStream.
 smile
PM MAIL   Вверх
tol05
Дата 29.4.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Сделал в двух рабочих потоках. 
Копирование и callback - без проблем, а вот с прогрессом на реальном кол-ве байтов - получается сложновато. Не учел я что File.Size тупо финальный размер показывает.
Так что текущий размер копирующегося файла узнаю через Stream-ы. 
Так что пример наверное показывать не буду.



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
XavierElf
Дата 2.5.2007, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Цитата(Naum @ 28.4.2007,  16:48)
Сомневаюсь, что рационально, но когда-то давно для проверки скорости сд-рома делал так, копировал по байтам smile. Т.е. создаешь dest-файл. Потом в цикле читаешь несколько байт из сорца и записываешь в дест. И всегда знаешь сколько уже скопировано.
Цитата(XavierElf @  28.4.2007,  17:00 Найти цитируемый пост)
как это к примеру реализовано в WinAPI функцией CopyFileEx(...)

А что мешает вызывать эту функцию?

В общем, конечно, ничто не мешает... Просто я хотел узнать, можно ли проблему решить средствами .NET smile

Добавлено через 4 минуты и 40 секунд
ЗЫ. Вопрос решён,тема закрыта.  smile 
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0702 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.