Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Свойства, аттрибуты файлов и папок (http://forum.oszone.net/showthread.php?t=148119)

leonaft 16-08-2009 18:45 1194952

Свойства, аттрибуты файлов и папок
 
Меня интересует работа с файлами и директориями, я бы даже хотел напсать скрипт для синхронизации файлов (такой какой мне нужно), и скрипт, сохраняющий в html файл список файлов со свойствами и аттрибутами в виде таблицы. Но возникли вопросы, ответы на которые не нашёл в хелпe, или может быть некоторые из возможностей, которые мне нужны, не поддерживаются AutoIT. Не могли бы мне кто-нибудь ответиь на следующие вопросы.
Какими командами или переменными можно получить следующие свойства (аттрибуты) файла (которые, например можно отобразить в проводнике, в режиме отображения "Таблица":
• тип файла,
• дата создания,
• владелец файла, если файл храниться на NTFS-разделе
• изменён (дата последнего изменения),
• открыт (дата последнего доступа)?
Я нашёл в Хелпе лишь следующее:
• как узнать время последней модификации файла: FileGetTime ( "filename" ), эта команда, как я понял выдаёт только время последнего изменения, но не выдаёт время создания, и время последнего открытия (доступа).
• как узнать размер: FileGetSize
И ещё вопрос: у меня не работает эмуляция клавишь shift, alt, сontrol, т.е. например команда Send("^c") не работает. Кто-нибудь знает, с чем это связано?

Nik_rus 16-08-2009 19:00 1194958

ctrl+с могут не работать, если основная раскладка не русская.
Насчет типа файла: это расширение ? Если да то можно-
Код:

$file = "Blah.bmp"
$str = StringTrimLeft($file,StringInStr($file, "."))
If Not @error Then
        MsgBox(0,"Done","Расширение файла " & $file & " = " & $str)
Else
        MsgBox(0,"Чета не рабит","Ты какой-то хреновый кодер или у файла нет расширения")
EndIf

Дата создания и проч я не знаю, думаю это есть в разных UDF.

FlatX007 16-08-2009 19:05 1194964

Цитата:

Цитата leonaft
• тип файла, »

Код:

#include <file.au3>
#include <array.au3>
Dim $szDrive, $szDir, $szFName, $szExt
$TestPath
= _PathSplit(@ScriptFullPath, $szDrive, $szDir, $szFName, $szExt)
_ArrayDisplay($TestPath,"Demo _PathSplit()")


SyDr 16-08-2009 20:06 1195005

FileGetAttrib - атрибуты файла
FileGetTime - время создания или модифицирования. Смотрите последнюю версию справки. Русская версия устарела в данном вопросе.

Creat0R 16-08-2009 21:42 1195122

Цитата:

Цитата leonaft
тип файла »

Код:

$sFileType = _FileGetType("C:\boot.ini")

MsgBox(64, 'Title', $sFileType)

Func _FileGetType($sFile)
    Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
    Local $sRegDefault, $sRegType = "", $sExt

    If _FileIsFolder($sFile) Then
        $sRegDefault = RegRead("HKCR\Folder", "")
        If $sRegDefault <> "" Then $sRegType = $sRegDefault
    Else
        $sExt = StringRegExpReplace($sFile, '^.*\.(.{0,5})$', '.\1')

        If @extended = 0 Or $sExt = $sFile Then
            $sExtSaerch = FileFindFirstFile($sFile & ".*")
            $sExt = StringRegExpReplace(FileFindNextFile($sExtSaerch), '^.*\.', '.')
            $sFile &= $sExt
        EndIf

        $sRegDefault = RegRead("HKCR\" & $sExt, "")

        If $sRegDefault <> "" Then $sRegType = RegRead("HKCR\" & $sRegDefault, "")
        If $sRegType = "" Then $sRegType = $sExt & "-File"
    EndIf

    Opt("ExpandEnvStrings", $iOld_Opt_EES)

    Return $sRegType
EndFunc

Func _FileIsFolder($sPath)
    Return StringInStr(FileGetAttrib($sPath & "\"), "D")
EndFunc

Цитата:

Цитата Nik_rus
Shift, alt, ctrl могут не работать, если основная раскладка не русская. »

Первый раз слышу. Из за раскладки может неправильно определяться буква c, поэтому лучше делать так:

Код:

_SendEx("^c")

Func _SendEx($sKeys, $iFlag=0)
    If @KBLayout = 0419 Then
        Local
$aANSI_Chars = StringSplit("ёйцукенгшщзхъфывапролджэячсмитьбю.?", "")
        Local $aASCII_Chars = StringSplit("`qwertyuiop[]asdfghjkl;'zxcvbnm,./&", "")

        For $i = 1 To $aANSI_Chars[0]
            $sKeys = StringReplace($sKeys, $aASCII_Chars[$i], $aANSI_Chars[$i])
        Next
    EndIf

    Return
Send($sKeys, $iFlag)
EndFunc

А конкретно для копирования, лучше вовсе так: Send("^{INS}")

leonaft 17-08-2009 00:27 1195240

Цитата:

А конкретно для копирования, лучше вовсе так: Send("^{INS}")
[b] Да, точно, надо проверить.

amel27 17-08-2009 08:55 1195365

Цитата:

Цитата leonaft
владелец файла »

Код:

ConsoleWrite(_FileGetOwner(@HomePath) &@CRLF)

Func _FileGetOwner($sFile, $sComputer = ".")
    Local $objWMI, $colItems, $objItem, $strOwner = ""

    $objWMI = ObjGet("winmgmts:\\" & $sComputer & "\root\cimv2")
    If Not(IsObj($objWMI)) Then Return SetError(1, 0, "")
    $colItems = $objWMI.ExecQuery("ASSOCIATORS OF {Win32_LogicalFileSecuritySetting='" & $sFile & "'}" _
        &
" WHERE AssocClass=Win32_LogicalFileOwner ResultRole=Owner")
    If Not(IsObj($colItems)) Then Return SetError(2, 0, "")
    For $objItem In $colItems
        $strOwner
= $objItem.ReferencedDomainName &"\"& $objItem.AccountName
        If $strOwner=="\" Then $strOwner = $objItem.SID
    Next

    Return
$strOwner
EndFunc


Creat0R 17-08-2009 19:24 1195915

Вот ещё функция для получения свойств файла:

Код:

#include <Array.au3>

$aProperties = _FileGetExtProperty(@AutoItExe, -1)

_ArrayDisplay($aProperties)

;===============================================================================
; Function Name:    _FileGetExtProperty($sPath, $iProp)
; Description:      Returns an extended property of a given file.
; Parameter(s):    $sPath - The path to the file you are attempting to retrieve an extended property from.
;                  $iProp - The numerical value for the property you want returned. If $iProp is is set
;                            to -1 then all properties will be returned in a 1 dimensional array in their corresponding order.
;                          The properties are as follows:
;                          #  Windows XP / Windows Server 2003    |    Windows 2000
;                          0              Name                            Name
;                          1              Size                            Size
;                          2              Type                            Type
;                          3              Date Modified                  Date Modified
;                          4              Date Created                    Attributes
;                          5              Date Accessed                  Comment
;                          6              Attributes                      Date Created
;                          7              Status                          Date Accessed
;                          8              Camera Model                    Owner
;                          9              Author                          ???
;                          10              Title                          Author
;                          11              Duration                        Title
;                          12              Category                        Subject
;                          13              Pages                          Category
;                          14              Owner                          Pages
;                          15              Copyright                      Copyright
;                          16              Artist                          Company Name
;                          17              Genre                          Module Desription
;                          18              Protected                      Module Version
;                          19              Comments                        Product Name
;                          20              Album Title                    Product Version
;                          21              Subject                        Sender Name
;                          22              Dimensions                      Recipient Name
;                          23              Year                            Recipient Number
;                          24              Track Number                    Csid
;                          25              Date Picture Taken              Tsid
;                          26              Bit Rate                        Transmission Time
;                          27              ???                            Caller Id
;                          28              ???                            Routing
;                          29              ???                            Audio Format
;                          30              Company                        Sample Rate
;                          31              Description                    Audio Sample Size
;                          32              File Version                    Channels
;                          33              Product Name                    Play Length
;                          34              Product Version                Frame Count
;                          35              ???                            Frame Rate
;                          36              ???                            Video Sample Size
;                          37              ???                            Video Compression
; Requirement(s):  File specified in $spath must exist.
; Return Value(s):  On Success - The extended file property, or if $iProp = -1 then an array with all properties
;                  On Failure - 0, @Error - 1 (If file does not exist)
; Author(s):        Simucal (Simucal@gmail.com), Mod. by G.Sandler (a.k.a CreatoR)
; Note(s):
;
;===============================================================================

Func _FileGetExtProperty($sPath, $iProp)
    Local $sFile, $sDir, $oShellApp, $oDir, $oFile, $aProperty, $sProperty
    If Not FileExists($sPath) Then Return SetError(1, 0, 0)

    $sFile = StringTrimLeft($sPath, StringInStr($sPath, "\", 0, -1))
    $sDir = StringTrimRight($sPath, (StringLen($sPath) - StringInStr($sPath, "\", 0, -1)))

    $oShellApp = ObjCreate("shell.application")
    $oDir = $oShellApp.NameSpace($sDir)
    $oFile = $oDir.ParseName($sFile)

    If $iProp = -1 Then
        Local
$aProperty[35]

        For $i = 0 To 34
            $aProperty[$i] = $oDir.GetDetailsOf($oFile, $i)
        Next

        Return
$aProperty
    EndIf

    $sProperty = $oDir.GetDetailsOf($oFile, $iProp)

    If $sProperty = "" Then Return 0
    Return $sProperty
EndFunc  ;==>_FileGetExtProperty

Цитата:

Цитата amel27
Func _FileGetOwner($sFile, $sComputer = ".") »

У меня она возвращает пустую строку :idontnow:

timsky 17-08-2009 22:45 1196122

Creat0R, у меня нормально отрабатывает. ХР SP3 EN

FlatX007 18-08-2009 07:31 1196325

Цитата:

Цитата Creat0R
У меня она возвращает пустую строку »

На Вин7 всё нормально ...
Код:

MsgBox(0,"", _FileGetOwner(@ScriptFullPath) )
Так возвращает владельца администратора.

leonaft 18-08-2009 12:09 1196512

Спасибо всем!!, проблемма решена. Насчёт свойств файлов всё ясно, насчёт даты последнего изменения файла, сам проверил, оказывается если пмоенять параметр 1 на 3 FileGetTime ( "filename", 3 ), то выдаёт дату последнего изменения. Наверное параметр 2 показывает дату последнего доступа, поскольку у меня отключено слежение за открытием файлов, я не знаю. Если какой-то топик, не рассмотрел, то потому, что пока нет времени.

FlatX007 17-01-2010 00:43 1322221

Цитата:

Цитата Creat0R
Вот ещё функция для получения свойств файла: »

На ХР возвращает только массив из 8 ячеек , на Вин 7 - 34 ячейки.
Мне нужно на ХР - 21 ячейка :) ... почему не работает ?

a_Wizard 19-01-2016 09:43 2596720

Как сортировать в одном окне аудиофайлы по последнему открытию?

У меня 900 песен, которые лежат в нескольких десятках папках. Прослушивая выборочно песни из разных альбомов несколько раз натолкнулся на файлы, которые не звучат. Однако очень скоро я позабыл названия этих песен и сейчас не могу вспомнить какие это были (среди 900) файлы. В Свойствах каждого файла конечно можно увидеть дату последнего открытия. Но проверять так по одному отнимет много времени. Поэтому, нужна общая сортировка по всем файлам. В колонке выбора столбцов отображения атрибутов нет Дата последнего открытия файла. Тогда как в одном окне мне увидеть Дата последнего открытия файла?

Для отображения всех песен (из разных папок) в одном окне достаточно в строке Поиск написать .mp3


Время: 06:46.

Время: 06:46.
© OSzone.net 2001-