Что нового

[Файловая система] Копирование файлов, отображение прогресса копирования в GUI

Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
сделаны изменения в функции.
исправлено:
при заполнении строки прогресса на сто процентов копирование продолжалось. то есть в прежнем варианте получалось , к примеру, 107%.
уточнено описание функции
сама функция в первом сообщении темы.
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
сделано изменение подсчета общего размера файлов или папок для копирования.
это изменение позволяет быстрее перейти к копированию. на небольшом количестве файлов это не заметно
 

Вовчик55

Новичок
Сообщения
57
Репутация
0
joiner, спасибо большое! Теперь 5382 файлов, 179 папок - копируются по времени одинаково (что напрямую средствами винды, что через вашу функцию) :ok:
Ни тормозов, ни подвисаний не замечено (Windows XP 64 SP2)
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
сделал небольшое изменение функции.
при использовании варианта передачи данных функции в виде массива можно указывать букву диска как исходный путь копирования. например:
Код:
$array[0][0] = 'F:\';или 'F:' - исходный путь
$array[0][1] = 'C:\';или 'C:' - путь назначения

будут скопированы все данные с указанного диска в папку, которой будет присвоено имя (Label) диска или буква диска. так, как делает система при копировании.
до этого изменения данные с диска копировались только в варианте, где нужно было через обзор указывать исходную папку и папку назначения. при этом не создавалась папка с именем диска
исходник в первом сообщении
 

super55885

Новичок
Сообщения
1
Репутация
0
Не могу скачать исходник, пишет: Такого пользователя не существует.
Хотя я авторизован на сайте. что за?
 

paa13

Новичок
Сообщения
44
Репутация
1
Здравствуйте! Подскажите как в вашем случае скопировать файлы по маске, файлов может быть разное кол-во и названия разные.

Вот что у меня получилось, но к сожалению не работает...

Код:
$array = _FO_FileSearch("D:\test", "*.txt")

For $i = 1 To UBound($array) -1
  $ret = _CopyDirCopyFile($array[$i], 'C:\test', 0, 1, 1, $Progress, $BtExit, $BtPause, 'Далее')
  ConsoleWrite($array[$i])
Next
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Проверьте, возвращает ли функция _fo_filesearch массив с действительными путями к файлам.
 

paa13

Новичок
Сообщения
44
Репутация
1
Проверьте, возвращает ли функция _fo_filesearch массив с действительными путями к файлам.
Возвращает, находит все файлы но копирует первый файл и уходит в ошибку

File.au3" (990) : ==> "ReDim" used without an array variable.:
ReDim $aArray[5]
ReDim ^ ERROR
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
В библиотеке file.au3, только одна функция?
 

paa13

Новичок
Сообщения
44
Репутация
1
В библиотеке file.au3, только одна функция?
вот этот поиск при копировании не вызывает ошибок
Код:
$arrays = _FileListToArray('D:\test', '*txt', 1)


А почему копирование отдельных файлов такое медленное? файлы в районе 1мб
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ошибка при работе библиотеки, которая поставляется с установкой языка. Какая версия AutoIT установлена?
при массовом копировании мелких файлов всегда падает скорость. можно проверить системным копированием
 

paa13

Новичок
Сообщения
44
Репутация
1
AutoIt v3.3.14.5
Что то очень сильно падает скорость, 30 файлов примерно 30 сек, при системном 1 сек, если копировать папкой большой разницы нет
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Так или иначе, ошибка в библиотеке языка. Возможно, баг.
Насчет быстроты копирования, тут сложно сказать. Таких задержек не замечал.
Используйте упрощенные функции копирования.
Если всегда копируются мелкие файлы, то достаточно использовать filecopy. Приравнять общее количество файлов к 100 процентам и вычислять округленный процент копирования.
 
Верх