Что нового

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
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,724
Все это конечно хорошо, но есть несколько "но":

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

CreatoR

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

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

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

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

Yashied

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

WinXP SP2
 

Medic84

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

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

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

SECTOR

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

CreatoR

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

SECTOR

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

Van4o

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

Mark

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

kzru_hunter

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

Yashied

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

*click*
 

kzru_hunter

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

kaster

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

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,556
Репутация
628
как я понял из функции
Код:
If Not StringInStr(FileGetAttrib($sSourcePath), "D") Then Return SetError(1, 0, -1)

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

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