Что нового

Внедрение в скрипт поиск файла по названию

amorphyc

Новичок
Сообщения
42
Репутация
0
Всем доброго дня, Уважаемые Гуру AutoIt!!!
Стояла такая задача: Некая игра не даёт возможности отката по сохранениям и сама перезаписывает прогресс через каждые пару минут. Необходимо было создать прогу, которая бы перехватывала текущий файл сохранения и копировала в отдельную папку с периодичностью 5 минут.
С помощью местных мастеров и нескольких примеров из разных тем удалось создать такое:
Код:
#Include "NotifyBox.au3"
AdlibRegister("ExitGame", 10000)

$Path = @UserProfileDir & "\Saved Games\metro exodus\292733975847239680\"
$Name = "m3_auto_save"
$Ext = ""
$Msec = 300000

Global $CurTime, $OldTime, $FullName = $Path & $Name & $Ext

Run(@ScriptDir & "\MetroExodus.exe")

   If Not FileExists($Path & "Saves\") Then
DirCreate($Path & "Saves\")
   _NotifyBox(0,"", "Папка сохранений создана.", 3)
EndIf
While Sleep($Msec)
   If Not FileExists($FullName) Then ContinueLoop
   $CurTime = FileGetTime($FullName, 0, 1)
   If $OldTime <> $CurTime Then
	  FileCopy($FullName, $Path & "Saves\" & @YEAR & "." & @MON & "." & @MDAY & "_" & @HOUR & "." & @MIN & $Ext)
	  $OldTime = $CurTime
   EndIf
WEnd
Func ExitGame()
 If Not ProcessExists("MetroExodus.exe") Then Exit
 EndFunc


Что получилось: прога запускает игру, проверяет наличие отдельной папки для будущих сохранений и, если папки нет, то создаёт её, о чем сообщает уведомлением. Далее прога каждые 5 минут мониторит указанный файл сохранения на время его перезаписи, и если он обновился, то копирует его в отдельную папку, название при этом состоит из даты и времени копирования. Таким образом, получается упорядоченный список с файлами сохранений. При этом прога постоянно мониторит запущенный процесс игры и если игру завершить, то через 10 секунд и сама прога выключается.

Теперь о минусах. Как видно из кода - папка с сохранениями имеет рандомное имя из ряда цифр и отличается у разных пользователей. И не факт, что у версий игры из разных источников - одинаковый путь до папки с сохранениями.

Нарисовалась задача - можно ли прогу научить искать файл сохранений просто по названию, чтоб прога могла работать у любого пользователя?
Друзья! Очень прошу помощи!
 

hedji

Продвинутый
Сообщения
408
Репутация
89
Код:
#include <Array.au3>
#include <RecFileListToArray.au3>

$FullName=""
$FileList=_RecFileListToArray(@UserProfileDir & "\Saved Games\metro exodus\", "m3_auto_save*", 1, 1, 0, 2)
For $i=0 To UBound($FileList)-1
	If(StringInStr($FileList[$i], "m3_auto_save")) Then
		$FullName=$FileList[$i]
	EndIf
Next
MsgBox(0, "", $FullName)


RecFileListToArray.au3 можно качнуть здесь
 
Автор
A

amorphyc

Новичок
Сообщения
42
Репутация
0
hedji сказал(а):
Код:
#include <Array.au3>
#include <RecFileListToArray.au3>

$FullName=""
$FileList=_RecFileListToArray(@UserProfileDir & "\Saved Games\metro exodus\", "m3_auto_save*", 1, 1, 0, 2)
For $i=0 To UBound($FileList)-1
	If(StringInStr($FileList[$i], "m3_auto_save")) Then
		$FullName=$FileList[$i]
	EndIf
Next
MsgBox(0, "", $FullName)


RecFileListToArray.au3 можно качнуть здесь
Преогромнейшее спасибо! Всё работает отлично!!! Магия, не иначе! :laugh:
 
Верх