Überwachen einer Datei

Alle anderen Themen ...

Moderator: ModerationP

Überwachen einer Datei

Beitragvon Schokoscherzkeks » 21. Sep 2020, 06:26

Hallo zusammen,

ich habe viel gegoggelt, aber leider nichts passendes gefunden. Hoffe ihr könnt mir weiter helfen

ich möchte mit einer Batch-Datei einen Zeitstempel in eine Textdatei, die im Netzwerk liegt, einen Zeitstempel schreiben.
Auf einem anderen PC soll diese Textdatei überwacht werden und sobald sie sich änder, soll eine Excel-Datei geöffnet werden.

Das Überwachen bekomme ich leider nicht hin.
Danke für eure Hilfe

Gruß
Andi
"Wer im Bankhaus sitzt, sollte nicht mit Scheinen werfen" (Eure Mütter)
Schokoscherzkeks
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 58
Registriert: 19. Apr 2013, 19:21

Re: Überwachen einer Datei

Beitragvon mumpel » 21. Sep 2020, 08:25

Hallo!

Das wirst Du auch nicht hinbekommen.

Gruß, René
Benutzeravatar
mumpel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8330
Registriert: 09. Jan 2005, 15:20
Wohnort: Lindau (B)

Re: Überwachen einer Datei

Beitragvon Schokoscherzkeks » 21. Sep 2020, 08:29

Hi,

warum nicht?

in Excel würde es mit dem FSO und einer Schleife klappen, allerdings frisst es mir die ganzen Ressourcen, bzw. wird dann schwierig mit anderen Makros.

Gruß
Andi
"Wer im Bankhaus sitzt, sollte nicht mit Scheinen werfen" (Eure Mütter)
Schokoscherzkeks
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 58
Registriert: 19. Apr 2013, 19:21

Re: Überwachen einer Datei

Beitragvon knobbi38 » 21. Sep 2020, 10:30

Hallo Andi,

diese Technik wird auch oft von Anwendungen unter Linux verwendet, wenn diese lose per Batch gekoppelt werden - ist also nicht so ungewöhnlich.
Zur Überwachung eignet sich das LastModifiedDate der "Syncdatei", daß dann in gewissen Zeitabständen auf Änderung überprüft wird (Polling). Die Zeitabstände sollten aber nicht zu kurz gewählt werden und müssen auf jedenfall größer sein, als die Auflösung des Zeitstempels der Datei!
Ob Excel zur Überwachung da wirklich gut geeignet ist, mag ich bezweifeln. Das könnte man auch mit einem kleinen Konsolen-Programm in C#, PowerShell, Python oder ähnliches im Hintergrund machen und dann eine Excel-Instanz mit der entsprechenden Datei starten.

Gruß Ulrich
Zuletzt geändert von knobbi38 am 21. Sep 2020, 10:34, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3471
Registriert: 02. Jul 2015, 14:23

Re: Überwachen einer Datei

Beitragvon Schokoscherzkeks » 21. Sep 2020, 10:34

Hi,

Danke für die Infos.

Leider hab ich keine Ahnung von C++ usw, aber das war auch mein Gedanke.

Kann mir da jmd helfen das zu realisieren?

Gruß
Andi
"Wer im Bankhaus sitzt, sollte nicht mit Scheinen werfen" (Eure Mütter)
Schokoscherzkeks
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 58
Registriert: 19. Apr 2013, 19:21

Re: Überwachen einer Datei

Beitragvon knobbi38 » 21. Sep 2020, 10:37

Hallo Andi,

von C++ habe ich nicht gesprochen und mit VBA Kenntnissen solltes du aoch ein kleines Konsolen-Projekt mit z.B. VB.Net selber erstellen können. Schon in der Hilfe dazu wird gezeigt, wie man das LastModifiedDate einer Datei auslesen kann.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3471
Registriert: 02. Jul 2015, 14:23

Re: Überwachen einer Datei

Beitragvon Schokoscherzkeks » 21. Sep 2020, 13:52

Hi,

und mit welchem Programm programmiere ich VB.net?

Sorry, ich kann nur Excel dank Google, alle andere muss ich mir dann irgendwie zusammensuchen

Gruß
Andi
"Wer im Bankhaus sitzt, sollte nicht mit Scheinen werfen" (Eure Mütter)
Schokoscherzkeks
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 58
Registriert: 19. Apr 2013, 19:21

Re: Überwachen einer Datei

Beitragvon Nepumuk » 21. Sep 2020, 14:14

Hallo Andi,

teste mal:

Code: Alles auswählen
Option Explicit

Private Const FILE_PATH As String = "G:\Eigene Dateien\Eigene Videos\Filme\TV.txt" ' Anpassen !!!

Private ldtmNextStart As Date

Public Sub StartTimer()
    Static dtmFileDateTime As Date
    If dtmFileDateTime = 0 Then
        dtmFileDateTime = FileDateTime(FILE_PATH)
    ElseIf dtmFileDateTime < FileDateTime(FILE_PATH) Then
        dtmFileDateTime = FileDateTime(FILE_PATH)
        Call MsgBox("Datei geändert.", vbExclamation, "Hinweis")
    End If
    ldtmNextStart = Now + TimeSerial(0, 0, 5)
    Call Application.OnTime(EarliestTime:=ldtmNextStart, Procedure:="StartTimer", Schedule:=True)
End Sub

Public Sub StopTimer()
    Call Application.OnTime(EarliestTime:=ldtmNextStart, Procedure:="StartTimer", Schedule:=False)
End Sub
Zuletzt geändert von Nepumuk am 21. Sep 2020, 14:18, insgesamt 1-mal geändert.
De fontibus non est disputandum

Gruß
Nepumuk 8-)
Benutzeravatar
Nepumuk
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 15214
Registriert: 10. Aug 2004, 08:40
Wohnort: Regensburg

Re: Überwachen einer Datei

Beitragvon knobbi38 » 21. Sep 2020, 14:17

Hallo Andi,

Die Programmiersprache VB.NET gehört zum Dotnet-Framework von MS. Man kann das Programm mit einem Texteditor erstellen und kompilieren, aber üblicherweise nimmt man dafür Visual Studio als IDE.
Bei Rheinwerk gibt es auch ein älters Openbook Einstieg in VB2012, das vielleicht eine erste Hilfestellung sein kann.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3471
Registriert: 02. Jul 2015, 14:23

Re: Überwachen einer Datei

Beitragvon knobbi38 » 21. Sep 2020, 14:27

@Nepumuk:
Dafür ständig eine Excel Instanz geöffnet zu halten, die möglichst auch die andere Arbeit am PC mit Excel nicht stören soll, halte ich für etwas übertrieben. Dafür reicht ein eine einfache VB.Net Consol-App, ein PS-Script oder, wenn erlaubt, ein CScript oder VBScript.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3471
Registriert: 02. Jul 2015, 14:23

Re: Überwachen einer Datei

Beitragvon Schokoscherzkeks » 22. Sep 2020, 07:06

@Nepumuk

Danke für deinen Vorschlag. Leider ist Excel keine Lösung, da Excel durch andere Programme geöffnet und beendet wird. Frag nicht wieso, weiß ich selbst nicht. Ist eine sehr teure Software die mit geöffnetem Excel nicht klar kommt.

Ich denke ich werde das ganze in Autohotkey lösen. Sollte ich erfolg habe, Poste ich das hier

Gruß
Andi
"Wer im Bankhaus sitzt, sollte nicht mit Scheinen werfen" (Eure Mütter)
Schokoscherzkeks
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 58
Registriert: 19. Apr 2013, 19:21

Re: Überwachen einer Datei

Beitragvon Schokoscherzkeks » 09. Mär 2021, 13:54

Für die, die es interessiert:

Der Code von/für Autohotkey:

Code: Alles auswählen
#SingleInstance, Force                              
ComObjError(true)                                  

FileGetTime, T1, D:\Test1.txt
FileGetTime, T2, D:\Test2.txt

Loop
{
   Process, Exist, Test1.exe
   if Errorlevel
   {
      goto, warten
   }
   Process, Exist, Test2.exe
   if Errorlevel
   {
      goto, warten
   }
   
   FileGetTime, neu, D:\Test1.txt
   If (T1 <> neu)
   {
      MsgBox,,Zeit wird eingetragen, Zeit wird eingetragen in 3...2...1...Fertig,3
      winactivate, Microsoft Excel - Test1.xlsb
      WinWaitActive, Microsoft Excel - Test1.xlsb,,2
      Try                                             
      {   
         XL := ComObjActive("Excel.Application")             
         XL.Workbooks("Test1.xlsb").activate       
      }
      Catch                                          
      {
         XL := ComObjCreate("Excel.Application")             
         XL.Workbooks.open("D:\Test1.xlsb")            
         XL.Visible := true                              
      }
      XL.Run("StartEnde.Dateiwaechter")
      sleep, 1500
      L1 = %neu%
      XL.ActiveWorkbook.Save()
      XL.ActiveWorkbook.Close(0)
      XL := ComObject.close
      Run, D:\Test1.xlsb
   }

   FileGetTime, neu, D:\Test2.txt
   If (T2 <> neu)
   {
      MsgBox,,Zeit wird eingetragen, Zeit wird eingetragen in 3...2...1...Fertig,3
      winactivate, Microsoft Excel - Test2.xlsb
      WinWaitActive, Microsoft Excel - Test2.xlsb,,2
      Try                                             
      {
         XL := ComObjActive("Excel.Application")             
         XL.Workbooks("Test2.xlsb").activate       
      }
      Catch                                          
      {
         XL := ComObjCreate("Excel.Application")             
         XL.Workbooks.open("D:\Test2.xlsb")            
         XL.Visible := true                              
      }
      XL.Run("StartEnde.Dateiwaechter")
      sleep, 1500
      L2 = %neu%
      XL.ActiveWorkbook.Save()
      XL.ActiveWorkbook.Close(0)
      XL := ComObject.close
      Run, D:\Test2.xlsb
   }
warten:
   sleep, 5000
}
exitApp
#b:: Exitapp


Gibt bestimmt schönere Lösungen, aber es tut was es soll.

PS: Viele Pfade führen nach ROM
"Wer im Bankhaus sitzt, sollte nicht mit Scheinen werfen" (Eure Mütter)
Schokoscherzkeks
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 58
Registriert: 19. Apr 2013, 19:21


Zurück zu Offtopic (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste