chat

  • Hallo ich möchte eigentlich nur überprüfen ob ein Ordner die Größe verändert und mir den namen des Ordners ausgeben es befinden sich ca 30 Ordner im Verzeichnis mit datei'n im Unterordner. Habe wahrscheinlich wiedermal die Kirche ums Dorf getragen ist alles nur schnell zusammengebastelt und besitzt noch Relikte aus irgendwelchen test also bitte nicht verwirrt sein das ganze wird noch im nachhinein optimiert falls es den funktioniert :)

    [autoit]

    #include <array.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    #include <Process.au3>
    FileDelete(@TempDir & "\test.txt")
    FileDelete(@TempDir & "\names.txt")
    FileDelete(@TempDir & "\linecount.txt")

    [/autoit][autoit][/autoit][autoit]

    $path = @AppDataDir & "\Ts3Client\chats\"
    $cmd1 = "dir " & $path & " > %temp%\test.txt " & "\O S"
    _RunDos($cmd1)

    [/autoit][autoit][/autoit][autoit]

    Dim $array[0]
    Dim $array1[0]
    Dim $array2[0]
    _RunDos($cmd1)
    $file= FileRead(@TempDir & "\test.txt")

    [/autoit][autoit][/autoit][autoit]

    $string = StringSplit($file," ")
    Global $zahl = 61
    ;MsgBox(0,"",$string)

    [/autoit][autoit][/autoit][autoit]

    ;_ArrayDisplay($string,"testarray")
    $stringsplit = StringSplit($string[$zahl],"==")
    $stringsplit[1] = $stringsplit[1]
    _ArrayAdd($array,$stringsplit[1])
    ;MsgBox(0,"",$array)

    [/autoit][autoit][/autoit][autoit]

    ;>>>>>>>>>>>----------------------------------------------------ORDNER NAMEN--------------------------------------------
    ;_ArrayAdd($array,"hi")
    do
    ;_ArrayDisplay($array,"testarray")
    $zahl = $zahl +16
    $stringsplit = StringSplit($string[$zahl],"==")
    _ArrayAdd($array,$stringsplit[1])
    Until $string[$zahl] = "Datei(en),"
    ;_ArrayDisplay($array,"testarray")
    ;<<<<<<-------------------------------------------------------ORDNER NAMEN--------------------------------------------

    [/autoit][autoit][/autoit][autoit]

    ;>>>>>>>>>>>---------------------------------------------------ORDNER GRÖSSE--------------------------------------------
    $zahl1 = 1
    do
    Global $size = DirGetSize($path & $array[$zahl1] & "==")
    ;MsgBox(0,"size",$array[$zahl1] & "==")
    $zahl1 = $zahl1 +1
    _ArrayAdd($array1,$size)
    ;_ArrayDisplay($array1,"size")
    Until $size = "-1"

    [/autoit][autoit][/autoit][autoit]

    ;<<<<<<<<<<----------------------------------------------------ORDNER GRÖSSE--------------------------------------------
    ;UDI5
    ;eG5Ja
    ;dn1kb htc
    ;<>>>>>>>>>>>>>----------------------------------------------------ORDNER vergleichen--------------------------------------------
    $zahl2 = 1
    $zahl2 = 0
    $zahl4 = 0
    $zahl5 = 0

    [/autoit][autoit][/autoit][autoit]

    $zahl6 = 3

    [/autoit][autoit][/autoit][autoit]

    While 1

    [/autoit][autoit][/autoit][autoit]

    $zahl3 = 0
    $zahl5 = 0
    do
    Global $size11 = DirGetSize($path & $array[$zahl2] & "==")
    _ArrayAdd($array2,$size11)
    ;MsgBox(0,"",$size11 & " " & $array[$zahl2] & "==")
    _ArrayDisplay($array2,"tehst")
    _ArrayDisplay($array1,$zahl4)

    [/autoit][autoit][/autoit][autoit]

    if $array2[$zahl4] > $array1[$zahl4] Then
    ;MsgBox(0,"","CHANGED!!!!!!!")
    EndIf
    $zahl2 = $zahl2 +1
    MsgBox(0,"",$array2[$zahl4] & " " & $array1[$zahl6])
    $zahl4 = $zahl4 +1
    $zahl6 = $zahl6 +1

    [/autoit][autoit][/autoit][autoit]

    Until $size = "-1"

    [/autoit][autoit][/autoit][autoit]

    ;_ArrayDisplay($array2,"tehst2222222")
    do
    _ArrayDelete($array2,$zahl5)
    $zahl5 = $zahl5 +1

    [/autoit][autoit][/autoit][autoit]

    Until $zahl5 =100

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit][autoit][/autoit][autoit]

    ;<<<<<<<<<<----------------------------------------------------ORDNER vergleichen--------------------------------------------

    [/autoit][autoit][/autoit][autoit][/autoit]
    • Offizieller Beitrag

    Reicht dir das?

    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    Global $folderList_A = _FileListToArray('c:\Autoit\', '*', $FLTA_FOLDERS, True)
    Global $a[UBound($folderList_A)][4]
    Global $tmp

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($folderList_A) -1
    $tmp = DirGetSize($folderList_A[$i], 1)
    $a[$i][0] = $folderList_A[$i]
    $a[$i][1] = $tmp[0]
    $a[$i][2] = $tmp[1]
    $a[$i][3] = $tmp[2]
    Next

    [/autoit][autoit][/autoit][autoit]

    $a[0][0] = 'Ordner'
    $a[0][1] = 'Size'
    $a[0][2] = 'Files'
    $a[0][3] = 'Dirs'
    _ArrayDisplay($a)

    [/autoit]
  • So kann man das Lösen. Aber Achtung: 1. Solange dein Programm läuft können andere Programme den Ordner nicht löschen (zumindest nicht, wenn in dem moment deine dirgetsize abfrage läuft, was ja mehrmals die sekunde passiert (solange es nicht zu viele ordner sind). 2. Alle übergeordneten Ordner ändern auch ihre größe, wenn der untergeordnete seine größe ändert!

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <array.au3>
    $Folder=_searchFolders("")
    local $GFolders[UBound($Folder)][2]
    for $i=0 to UBound($Folder)-1 step 1
    $GFolders[$i][0]=$Folder[$i]
    $GFolders[$i][1]=DirGetSize($Folder[$i])
    next
    _ArrayDisplay($Folder)

    [/autoit] [autoit][/autoit] [autoit]

    local $Timer
    While 1
    $Timer=TimerInit()
    for $i=0 to UBound($GFolders)-1 step 1
    if $GFolders[$i][1]<>DirGetSize($GFolders[$i][0]) then
    ConsoleWrite("Der Ordner "&$GFolders[$i][0]&" änderte seine Größe."&@CRLF)
    $GFolders[$i][1]=DirGetSize($GFolders[$i][0])
    endif
    next
    if TimerDiff($Timer)<100 then ;damit nicht zu viel cpu verbraucht wird
    sleep(100-TimerDiff($Timer))
    endif
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _searchFolders($folder)
    local $array[10],$count=0
    $search=FileFindFirstFile($folder&"\"&"*.*")
    while NOT @error
    $name=FileFindNextFile($search)
    If @error then
    ExitLoop
    ElseIf @extended then
    $array[$count]=$folder&"\"&$name
    $count+=1
    $ar=_searchFolders($folder&"\"&$name)
    if UBound($ar)>0 then
    ReDim $array[UBound($array)+UBound($ar)+1]
    for $i=0 to UBound($ar)-1 step 1
    $array[$count]=$ar[$i]
    $count+=1
    next
    endif
    if $count=UBound($array) then
    ReDim $array[UBound($array)+10]
    endif
    EndIf
    WEnd
    ReDim $array[$count]
    return $array
    EndFunc

    [/autoit]

    Viel Freude mit dem Script!

  • Schon mal danke an die Lösungen aber verstehe diese nicht wirklich @Kanashius ich muss ja die Ordner im Verzeichnis Appdata\Roaming\Ts3Client\chats\ einlesen und diese dann überprüfen welche davon geändert wurden und diese dann ausgeben verstehe aber nicht wo ich das da angeben sollte

    Einmal editiert, zuletzt von manske (22. Januar 2015 um 19:57)