Войти

Показать полную графическую версию : [решено] GetCurrentDirectory


semiono
19-03-2009, 20:49
Наверное нету в AutoIt3 такой фитчи? Мне надо чтоб:
FileSetAttrib(@ScriptDir,"-RASHNOT",1)
FileSetAttrib(@ScriptDir,"-RASHNOT",1)
FileSetAttrib(@ScriptDir,"-RASHNOT",1)
FileSetTime(@ScriptDir,"20010101000000",0,1)
FileSetTime(@ScriptDir,"20010101000000",1,1)
FileSetTime(@ScriptDir,"20010101000000",2,1)
Exit
выполнялся в текущей директории... а не там где скрипт расположен... хотя может если убрать @ScriptDir... щас посмотрю... ??
кстати, неудобство в том что в FileSetTime("", "", 0+1+2=3, 1) не поддерживается и даже странно! :(

proxy
19-03-2009, 21:54
выполнялся в текущей директории... а не там где скрипт расположен... хотя может если убрать @ScriptDir. »
не убрать, а заменить на нужный адрес папки, пример:
FileSetAttrib("c:\dir1","-RASHNOT",1)

или Вы про макрос @WorkingDir?
тогда так: FileSetAttrib(@WorkingDir,"-RASHNOT",1)

верно, FileSetTime("", "", 0+1+2, 1) - не проканает.

думаю нет смысла 3 раза:
FileSetAttrib(@ScriptDir,"-RASHNOT",1)
FileSetAttrib(@ScriptDir,"-RASHNOT",1)
FileSetAttrib(@ScriptDir,"-RASHNOT",1)
если они полностью одинаковые - хватит один раз.

если ооооооочень много файлов, того возможно сделать ручной поиск каждого файла,
и при нахождении очередного сразу выставлять ему время открытия, создания, last доступа.

proxy
19-03-2009, 22:24
#include <Array.au3>

;Папка аутоита
$AutoItPath = StringRegExpReplace(@AutoItExe, '\\[^\\]+$', '')

$DirsArray = DirListToArray($AutoItPath, 1)
_ArrayDisplay($DirsArray)

Func DirListToArray($sPath, $iWithFolder=0, $sRootPath=1)
$sPath = StringRegExpReplace($sPath, '\\+$', '')
Local $aRetArray[1], $aSubDirsArr, $sFindNextFile, $sCurrentPath

Local $sFindFirstFile = FileFindFirstFile($sPath & "\*.*")
If @error = 1 Then Return SetError(1, 0, -1)

If $iWithFolder == 1 AND $sRootPath == 1 Then
$aRetArray[0] += 1
ReDim $aRetArray[$aRetArray[0]+1]
$aRetArray[$aRetArray[0]] = $sPath
;~ _Set_Attrib_And_Time($sPath)
EndIf

If $sRootPath = 1 Then
ReDim $aRetArray[2]
$aRetArray[1] = $sPath
EndIf

While 1
$sFindNextFile = FileFindNextFile($sFindFirstFile)
If @error = 1 Then ExitLoop

$sCurrentPath = $sPath & "\" & $sFindNextFile

If StringInStr(FileGetAttrib($sCurrentPath), "D") Then
If $iWithFolder == 1 Then
$aRetArray[0] += 1
ReDim $aRetArray[$aRetArray[0]+1]
$aRetArray[$aRetArray[0]] = $sCurrentPath
;~ _Set_Attrib_And_Time($sCurrentPath)
EndIf

$aSubDirsArr = DirListToArray($sCurrentPath, $iWithFolder, 0)

If IsArray($aSubDirsArr) Then
For $i = 1 To $aSubDirsArr[0]
$aRetArray[0] += 1
ReDim $aRetArray[$aRetArray[0]+1]
$aRetArray[$aRetArray[0]] = $aSubDirsArr[$i]
Next
EndIf
Else
$aRetArray[0] += 1
ReDim $aRetArray[$aRetArray[0]+1]
$aRetArray[$aRetArray[0]] = $sCurrentPath
;~ _Set_Attrib_And_Time($sCurrentPath)
EndIf
WEnd

FileClose($sFindFirstFile)

Return $aRetArray
EndFunc

Func _Set_Attrib_And_Time($sPath)
FileSetAttrib($sPath,"-RASHNOT",1)
FileSetTime($sPath,"20010101000000",0,1)
FileSetTime($sPath,"20010101000000",1,1)
FileSetTime($sPath,"20010101000000",2,1)
EndFunc

закомментированные строчки вызов функции для установки атрибутов и времени.
применять на папку AutoIt (которая обрабатывается в этом примере) не рекомендуется.

оригинал функции. (http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=520#19)




© OSzone.net 2001-2012