log datei in echtzeit in listview einlesen

  • Hallo,

    habe folgendes Problem

    [autoit]

    Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & '\ /D /S /E /V /C /H /R /Y > copy.log', "", @SW_HIDE)

    [/autoit]

    möchte gerne den inhalt der log in einer listview darstellen in echtzeit also das er alles was er in die log schreibt in der listview dargestellt wird ?

    Eine idee?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    2 Mal editiert, zuletzt von subzero007 (28. September 2009 um 17:25)

  • Ich wäre auch mit der lösung zu frieden wenn ich es in der listview darstelle ohne es vorher in eine datei umzuleiten >
    aber ich weiss nicht wie?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi,
    echtzeit^^, der war gut :rofl:
    mach doch eine Endlosschleife, prüfe den Zeitstempel der Logdatei, wenn der sich ändert dann Daten des Logs in die Liste einlesen....

    Zitat

    ohne es vorher in eine datei umzuleiten

    dafür gibts schon massig Lösungen, schau mal nach stdoutread, bsp:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    Global $line

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

    $Console = Run(@ComSpec & " /c ping http://www.autoit.de", @ScriptDir, @SW_hide,$STDERR_CHILD + $STDOUT_CHILD)

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

    While 1
    $line &= StdoutRead($Console)
    If @error Then ExitLoop
    WEnd

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

    MsgBox(0, "STDOUT gelesen:", $line)

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (28. September 2009 um 12:57)

  • Ich will ja vom xcopy den inhalt in eine datei umleiten das datum uhrzeit ändernt sich ja permanent,
    hast du eine idee wie ich das am besten mache?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • schau mal in dem Beispiel im Post obendrüber....ich editiere immer viel zu langsam^^

  • was mache ich falsch ?

    [autoit]

    #include <Constants.au3>
    Global $line

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

    Func CopyWithProgress($srcDir, $destDir)
    If Not FileExists($destDir) Then DirCreate($destDir)

    $lastpath = StringTrimLeft($srcDir, StringInStr($srcDir, "\", "", -1))
    $console = Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
    $line &= StdoutRead($Console)
    If @error Then ExitLoop
    WEnd

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

    GUICtrlCreateListViewItem($line, $hListView1)

    EndFunc ;==>CopyWithProgress

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • ich weiss nicht was ich falsch mache oder was anders ist so gehts...

    [autoit]

    Func CopyWithProgress($srcDir, $destDir)

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

    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    ;$srcSize = DirGetSize($srcDir, 1)
    ;$1_percent = $srcSize[0] / 100
    ;Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y')

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

    $lastpath = StringTrimLeft($srcDir, StringInStr($srcDir, "\", "", -1))
    $TSDIS = Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y', "", @SW_HIDE)

    EndFunc ;==>CopyWithProgress

    [/autoit]

    und so nicht ??

    [autoit]

    Func CopyWithProgress($srcDir, $destDir)

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

    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    ;$srcSize = DirGetSize($srcDir, 1)
    ;$1_percent = $srcSize[0] / 100
    ;Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y')

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

    $lastpath = StringTrimLeft($srcDir, StringInStr($srcDir, "\", "", -1))
    $Console = Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y', "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    ConsoleWrite(@SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y')
    While 1
    $line &= StdoutRead($Console)
    If @error Then ExitLoop
    WEnd
    GUICtrlCreateListViewItem($line, $hListView1)

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

    EndFunc

    [/autoit]

    Wo mache ich den fehler??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi,

    xcopy scheint nicht die Standard Pipe zu verwenden.
    Da Du aber den Stream eh in eine Varaibale einliest, kannst Du auch in eine Text Datei umlenken und dann die Textdatei einlesen, was aber gffs. im Listview nicht sinvoll ist:

    [autoit]

    Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y >' & @scriptdir & '\xcopy.txt', "", @SW_HIDE)
    While ProcessExists ("xcopy.exe")
    ToolTip ("Bitte warten. Xcopy läuft....", 0, 0)
    Wend
    ToolTip()
    $line = FileRead (@ScriptDir & "\xcopy.txt")
    GUICtrlCreateListViewItem($line, $hListView1)
    FileDelete (@Scriptdir & "\xcopy.txt")

    [/autoit]

    Alternativ nimmst Du anstatt FileRead _FileReadToArray und baust darüber Dein Listview auf....

    ;-))
    Stefan

  • Funktioniert so in etwa:

    so sieht die listview aus:
    autoit.de/wcf/attachment/6198/

    es geht um die Untere Listview

    so sieht die xcopy.txt aus:

    C:\Drivers\Monitor\TPFLX.ICM
    C:\Drivers\Monitor\TPLCD.CAT
    C:\Drivers\Monitor\TPLCD.icm
    C:\Drivers\Monitor\TPLCD.INF
    C:\Drivers\Monitor\TPLCD.PNF
    5 Datei(en) kopiert


    Hier mein Code:

    [autoit]

    Func CopyWithProgress($srcDir, $destDir)

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

    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    $lastpath = StringTrimLeft($srcDir, StringInStr($srcDir, "\", "", -1))
    Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y >' & @scriptdir & '\xcopy.txt', "", @SW_HIDE)
    Sleep(1000)
    While ProcessExists ("xcopy.exe")
    ToolTip ("Bitte warten. Xcopy läuft....", 0, 0)
    Wend
    ToolTip('')
    $line = FileRead (@ScriptDir & "\xcopy.txt")
    GUICtrlCreateListViewItem($line, $hListView1)
    ;FileDelete (@Scriptdir & "\xcopy.txt")

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

    EndFunc ;==>CopyWithProgress

    [/autoit]

    Kann man das Optimieren?
    oder hat da jemand eine andere idee?

    Gruß
    Subzero

    Dateien

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi,

    Anstatt:
    $line = FileRead (@ScriptDir & "\xcopy.txt")
    GUICtrlCreateListViewItem($line, $hListView1)

    [autoit]

    #include <file.au3> ; am Anfang Deines Scriptes einfügen
    ;....
    ;....
    _FileReadToArray (@ScriptDir & "\xcopy.txt", $line)
    For $i = 1 To Ubound ($line) - 1
    GUICtrlCreateListViewItem($line [$i], $hListView1)
    Next

    [/autoit]

    ;-))
    Stefan

    P.S: Editiert nach Code Überprüfung

  • ok funktioniert ;)
    danke
    Gibt es eine möglichkeit das tooltip in die mitte der gui zu setzen habe nichts in der hilfe gefunden ??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi,

    aus der Hilfe:

    Zitat

    ToolTip ( "text" [, x [, y [, "title" [, icon [, options]]]]] )

    x und y must Du für Deine Gui ausrechnen. Gffs. mit WinGetPos die Koordinaten ausrechnen:

    [autoit]

    $winpos = WinGetPos ("Meine Gui")
    While ProcessExists ("xcopy.exe")
    ToolTip ("Bitte warten. Xcopy läuft....", $winpos [0] + $winpos [2] / 2, $winpos [1] + $winpos [3] / 2) ; sollte mittig zur Gui stehen, oder?
    sleep (100) ; hatte ich vergessen um CPU runterzufahren....
    Wend

    [/autoit]

    ;-))
    Stefan

  • Eine letzte frage habe ich noch,
    das standart trennzeichen in einer listview ist

    [autoit]

    |

    [/autoit]


    kann man das ändern auf

    [autoit]

    ->

    [/autoit]

    Geht das??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • finde in der hilfe nichts wie mache ich das ?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (28. September 2009 um 16:40)

  • GUIDataSeparatorChar Legt das Trennzeichen für Teildaten fest, die mit GUICtrlSetData gesetzt werden.
    Das Standardzeichen ist '|'.

    Und wie kann man das festlegen ??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Also müsste eigentlci so gehen oder:

    [autoit]

    Opt("GUIDataSeparatorChar","->")

    [/autoit]

    aber egal habe jetzt mein text formatiert geht auch so
    danke für die unterstützung

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."