Автор Тема: Создание копий файла через определенный промежуток времени.  (Прочитано 756 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн amorphyc [?]

  • Новичок
  • *
  • Сообщений: 40
  • Репутация: 0
  • Пол: Мужской
    • Награды
Версия AutoIt: 3.

Описание: Здравствуйте, гуру AutoIt! Снова хочу попросить помощи!
Суть такова: есть файл, который постоянно, с некоторой периодичностью (5-10 минут) перезаписывается с изменениями.
Возможно ли создать скрипт, который будет каждые, скажем, 10 минут сохранять в папку копии этого файла. Допустим, с именами file_01.sav, file_02.sav и так далее, или просто со временем в названии, когда была запись,  чтоб всегда можно было достать этот файл таким, каким он был раньше. И пусть все эти копии файла хранятся себе в папке.
Для полного понимания - это файл сохранения игры, игра его постоянно перезаписывает без возможности отката назад.

Примечания:
Доктор, не лечи меня, я не больной!

Русское сообщество AutoIt


Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
amorphyc  [?]
Цитировать
просто со временем в названии, когда была запись
Формат времени: YYYYMMDDHHMMSS
Код: AutoIt [Выделить]
$Path = "C:\Новая папка\" ; путь к файлу
$Name = "Имя файла"       ; имя файла
$Ext  = ".sav"            ; расширение
$Msec = 60000             ; частота опроса

Global $CurTime, $OldTime, $FullName = $Path & $Name & $Ext
While Sleep($Msec)
  If Not FileExists($FullName) Then ContinueLoop
  $CurTime = FileGetTime($FullName, 0, 1)
  If $OldTime <> $CurTime Then
    FileCopy($FullName, $Path & $CurTime & $Ext)
    $OldTime = $CurTime
  EndIf
WEnd


Оффлайн amorphyc [?]

  • Новичок
  • *
  • Сообщений: 40

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Пока не получается ни запустить, ни скомпилировать в экзешник. (


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
Указывает на ошибку оператора присваивания с пустым описанием самой ошибки :stars:
Попробуйте отключить антивирус или переустановите AutoIt.

Русское сообщество AutoIt


Оффлайн amorphyc [?]

  • Новичок
  • *
  • Сообщений: 40

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Антивируса нет, программу установил самую последнюю, пробовал с другими папками, отключал скрытие папки, результат тот же. При компилировании - ошибка пустая, при запуске скрипта - ошибка "Unable to parse line"

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2797
  • Репутация: 472
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Запустить в редакторе и посмотреть ошибку
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн amorphyc [?]

  • Новичок
  • *
  • Сообщений: 40

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Спасибо за совет! В редакторе проверил, нашел причину ошибок - все пробелы как-то заменились на символ В. Поправил,  теперь ошибок нет.
Скрипт компилится, запускается, но работы его совсем не видно.  ( Что ж с ним такое-то...

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2797
  • Репутация: 472
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
тебе дали пример. теперь подставь свои пути что и куда копировать

Русское сообщество AutoIt


Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
amorphyc  [?]
Цитировать
работы его совсем не видно
Данный скрипт раз в минуту ($Msec = 60000) проверяет время изменения файла "$Path & $Name & $Ext" (подставьте свои значения). Если время изменилось (относительно предыдущей проверки), то в папке $Path создаётся копия файла с временем изменения в качестве имени (в формате YYYYMMDDHHMMSS) и с расширением $Ext.

Например, для файла "C:\Новая папка\Имя файла.sav" будут созданы копии
"C:\Новая папка\20180907190731.sav"
"C:\Новая папка\20180907191711.sav"
"C:\Новая папка\20180907192347.sav" и т.д.
Но, ещё раз повторю, исходный файл "C:\Новая папка\Имя файла.sav" должен быть перезаписан, т.е. должно измениться его время модификации.

Оффлайн amorphyc [?]

  • Новичок
  • *
  • Сообщений: 40

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Делаю именно это, но хоть убейте,  ничего не добавляется. Уже и скриптом, и экзешником,  и в эту же папку кладу, и в любую другую - нет никаких новых файлов. Короче, меня выбесило.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
amorphyc
Если вы ПРАВИЛЬНО указали путь к файлу, то после первой минуты в той же папке должна появиться первая копия, т.к. при запуске время нулевое.

Хорошо. Давайте добавим отладки.
1. Если файл не найден, появится сообщение.
2. В папке $Path будет создан log.txt, в который при каждой проверке будет записана информация о текущем и предыдущем времени, а также ошибка при копировании файла. Посмотрите этот лог и сделайте вывод о наличии изменений времени
Код: AutoIt [Выделить]
$Path = "C:\Новая папка\" ; путь к файлу
$Name = "Имя файла"       ; имя файла
$Ext  = ".sav"            ; расширение
$Msec = 5000              ; частота опроса

; ----------------------- ;

Global $CurTime, $OldTime, $FullName = $Path & $Name & $Ext
FileDelete($Path & "log.txt") ; отладка
While Sleep($Msec)
  If Not FileExists($FullName) Then
    MsgBox(262144, "", "Файл не найден: " & $FullName) ; отладка
    ContinueLoop
  EndIf
  $CurTime = FileGetTime($FullName, 0, 1)
  FileWriteLine($Path & "log.txt", "Текущее время   : " & $CurTime & @CRLF & "Предыдущее время: " & $OldTime) ; отладка
  If $OldTime <> $CurTime Then
    FileCopy($FullName, $Path & $CurTime & $Ext)
    FileWriteLine($Path & "log.txt", "Файл скопирован. Ошибка: " & @error) ; отладка
    $OldTime = $CurTime
  EndIf
WEnd


Оффлайн amorphyc [?]

  • Новичок
  • *
  • Сообщений: 40

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Уважаемый Inni, если я пробую это сделать просто с тестовым файлом, на другом диске - всё получается! Но именно с нужным файлом в нужной папке - ноль результата! Возможно дело в пути к файлу "C:\Users\юзернейм\AppData\Local\AVGame\Saved\Savegames\". Путь копирую из строки проводника. Проверяю  файл на время изменения - меняется. А результата нет, к сожалению.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
amorphyc
В логе время меняется?


Добавлено: Сентябрь 07, 2018, 21:32:27
Вот альтернатива. Через каждые $Msec миллисекунд должна тупо создаваться копия файла с ТЕКУЩИМИ датой и временем в качестве имени
Код: AutoIt [Выделить]
$Path = "C:\Новая папка\" ; путь к файлу
$Name = "Имя файла"       ; имя файла
$Ext  = ".sav"            ; расширение
$Msec = 60000             ; интервал создания копий

; ----------------------- ;

$FullName = $Path & $Name & $Ext
While Sleep($Msec)
  If Not FileExists($FullName) Then
    MsgBox(262144, "", "Файл не найден: " & $FullName)
    ContinueLoop
  EndIf
  If Not FileCopy($FullName, $Path & @YEAR & @MON & @MDAY & "_" & @HOUR & @MIN & @SEC & $Ext) Then MsgBox(262144, "", "Ошибка копирования")
WEnd

« Последнее редактирование: Сентябрь 07, 2018, 21:33:12 от InnI »

Оффлайн amorphyc [?]

  • Новичок
  • *
  • Сообщений: 40

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
УРРРААА!!! Я нашёл, наконец, ошибку!  :laugh:
В первом примере в середине кода пропущено "EndIf", добавил, всё заработало!
Спасибо вам, уважаемые мастера, Вы очень помогли ! )
В принципе, тема решена, но если ещё немного поможете с удобностями - буду очень благодарен! )
1. Будет удобней сохранять файла не сюда же, а в отдельную папку, чтоб не путались с другими игровых файлами.
2. Если можно, то заменить в пути к папке "Имя Пользователя" на универсальный путь. Чтоб и другими людям можно было пользоваться готовы экзешником.
Сам тоже буду пытаться ковырять, но я вообще дремучий в этом.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
amorphyc  [?]
Цитировать
В первом примере в середине кода пропущено "EndIf"
А вот с этого момента поподробнее. Где это EndIf пропущен? :think:

Русское сообщество AutoIt

Re: Создание копий файла через определенный промежуток времени.
« Ответ #14 Отправлен: Сентябрь 07, 2018, 23:35:02 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
7 Ответов
8737 Просмотров
Последний ответ Апрель 17, 2012, 15:59:15
от Starroma
3 Ответов
9181 Просмотров
Последний ответ Февраль 20, 2011, 21:42:07
от `p r o x y
2 Ответов
6090 Просмотров
Последний ответ Октябрь 24, 2011, 23:13:05
от SUN-CHA
8 Ответов
5570 Просмотров
Последний ответ Июнь 05, 2012, 00:01:52
от jufas222
8 Ответов
2602 Просмотров
Последний ответ Август 15, 2014, 17:07:44
от madmasles
8 Ответов
2874 Просмотров
Последний ответ Февраль 18, 2015, 13:30:52
от InnI
7 Ответов
2616 Просмотров
Последний ответ Июнь 12, 2015, 14:29:26
от Garrett
0 Ответов
984 Просмотров
Последний ответ Июнь 04, 2015, 06:27:42
от madmasles
1 Ответов
1018 Просмотров
Последний ответ Декабрь 30, 2015, 11:00:42
от uritalex
1 Ответов
1628 Просмотров
Последний ответ Январь 11, 2016, 16:54:10
от InnI