Что нового

FilesCopyProgress - Копирование файлов с отображением прогресса

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 166
Репутация
2 331
AutoIt: 3.3.0.0
Версия: 1.2

Категория: Автоматизация, Файловая система

Описание: Функция для копирования файлов с одного каталога в другой, при этом детально отображается прогресс копирования.

Пример:
Код:
#include "FilesCopyProgress.au3"

$s__FCSP_CancelBtnTxt 			= "Отмена"
$s__FCSP_RemainedLblTxt 		= "Осталось:"
$s__FCSP_GettingFilesListTxt 	= "Получаю список файлов..."
$s__FCSP_CopyLocationFormatTxt 	= '%s\nИз "%s" В "%s"'

$i__FCSP_AskCopyCancel 			= True
$s__FCSP_AskCancelTitle 		= "Внимание!"
$s__FCSP_AskCancelMsg 			= "Вы уверены, прервать процесс копирования?"

$Parent_Handle 					= WinGetHandle("")
$Title 							= "Копирование..."
$Source 						= "C:\Source"
$Dest 							= "C:\Dest"

_FilesCopyShowProgress($Source, $Dest, 1, $Title, 400, 170, 0, 0, $Parent_Handle)

Файл: FilesCopyProgress.zip (страница в ф.архиве)

Снимок:


Примечания: Тестировалось только под WinXP SP2 Rus.

История версий:
v1.2
Значительные улучшения в обработке и скорости копирования.

v1.1
Переписана концепция функций

v1.0
Первый выпуск.
Автор(ы): G.Sandler (CreatoR)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
Все это конечно хорошо, но есть несколько "но":

  • При копировании больших файлов прогресс у меня завис, хотя файл(ы) скопировались до конца.
  • На врямя копирования, GUI безбожно зависает, что сильно снижает область использования данной функции.
  • В Vist'е возможно это не будет корректно работать, т.к используемого AVI (если я не ошибаюсь) в shell32.dll попросту нет.
  • Альтернативой данной функции (хотя и сильно упрощенной) может служить метод CopyHere.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 166
Репутация
2 331
Medic84 [?]
время она стала правильно показывать или нет?
Я ничего не менял по этому поводу, время обновляется в зависимости от данных (подсчёт скопированного и оставшегося).

Yashied [?]
При копировании больших файлов прогресс у меня завис, хотя файл(ы) скопировались до конца.На врямя копирования, GUI безбожно зависает, что сильно снижает область использования данной функции.
Какая система? Я же написал, тетировалось только под WinXP SP2. И у меня естественно ничего не зависает ;).

В Vist'е возможно это не будет корректно работать, т.к используемого AVI (если я не ошибаюсь) в shell32.dll попросту нет.
А где она? ведь нативное копирование использует какую то анимацию?

Альтернативой данной функции (хотя и сильно упрощенной) может служить метод CopyHere
Есть такое же и через WinAPI («SHFileOperation» в shell32.dll). Могу выложить отдельно пример если интересно.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
CreatoR сказал(а):
Какая система? Я же написал, тетировалось только под WinXP SP2. И у меня естественно ничего не зависает ;).
WinXP SP2
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 530
Репутация
325
Yashied [?]
При копировании больших файлов прогресс у меня завис, хотя файл(ы) скопировались до конца.
А у меня зависло все))) Потом отвисло, прогресс остановился.

В Vist'е возможно это не будет корректно работать, т.к используемого AVI (если я не ошибаюсь) в shell32.dll попросту нет.
В Win7 эта AVI не отображается, т.к. ее нет. Было бы классно, если бы ее выбирать можно было.

Операционка Win7
 

SECTOR

Продвинутый
Сообщения
390
Репутация
57
:( А когда я запускаю пример (да и вообще функцию) SciTE зависает, скрипт вылетает и пишет в консоли ОШИБКА -1073741819! Почему так? У меня WinXP SP2 (eXpanded)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 166
Репутация
2 331
Seen [?]
когда я запускаю пример (да и вообще функцию) SciTE зависает
Версия AutoIt? спрашиваю т.к в профиле светится две версия :smile:
 

SECTOR

Продвинутый
Сообщения
390
Репутация
57
Счас использую только 3.3.0.0 :IL_AutoIt_1:
 

Van4o

Новичок
Сообщения
2
Репутация
0
а у меня что то вообще прогресс не показывает. сам процесс копирования файлов идет,а прогрес не отображается.
win2k
 

Mark

Новичок
Сообщения
22
Репутация
1
Очень сильно тормозит.
Особенно на старых машинах :(
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Помню давно скачивал скрипт, который предоставлял скачивание файла Explorer'y. Сейчас нигде не могу его найти
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
kzru_hunter сказал(а):
Помню давно скачивал скрипт, который предоставлял скачивание файла Explorer'y. Сейчас нигде не могу его найти
*click*
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Yashied Это не то. На офф. форуме вроде видел, там была спец. тема посвященная общим вопросам. На каждый вопрос был ответ. И там увидел скрипт, в котором название функции было похоже на _IExplorer_FileCopy
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Да, ошибся, я думал, что эта функция только файлы копирует, а не папки. :smile:
Изначально неправильно использовал её
 

araneon

Новичок
Сообщения
59
Репутация
0
Понимаю что тема давняя но всё же.
У меня почему то не получается скопировать с диска DVD (D:\) всё содержимое в папку на диске (C:\Dest).
Процесс вроде отображается как нужно, показывая, что откуда и куда копируется, но по факту папка (C:\Dest) в конце остаётся пустой.
Может я что не так делаю, Autoit 3.3.8.1 в FilesCopyProgress Example.au3 изменил только значение переменных $Source и $Dest на свои ($Source = "D:\" $Dest = "C:\Dest").
 

joiner

Модератор
Локальный модератор
Сообщения
3 036
Репутация
504
как я понял из функции
Код:
If Not StringInStr(FileGetAttrib($sSourcePath), "D") Then Return SetError(1, 0, -1)

она вообще не должна работать если указать исходный или конечный путь НЕ папку(смотри выше). ведь в твоем варианте ты указываешь диск

я писал подобную функцию http://autoit-script.ru/index.php?topic=13191.0
она копирует в любом случае, но при указании исходного пути как путь к диску, создает в месте назначения папку с именем диска.
если тебе нужно использовать только функцию из этой темы, то составь список файлов(или папок) диска Д и копируй
 
Верх