Logdatei von 2 exe aus beschreiben

30/01/2009 - 00:36 von Tim Oppmann | Report spam
Ich habe eine "Main"-Exe und eine Active-X-Exe als Verweis in der
"Main"-Exe, somit werden beide nebeneinander ausgeführt. Ich hàtte
gerne, dass beide ihre Fehler in dieselbe Datei schreiben können. Aber
ich weiß nicht, ob es da Probleme geben kann.
Jede der beiden Exen hat die folgende Funktion, um Fehler zu schreiben:

Public Sub WriteReport(ByVal sString As String)

Dim iFile%
iFile = FreeFile()

Open m_sPath For Append As #iFile

Print #iFile, date & " " & Time & " - " & sString
Close #iFile

End Sub

m_sPath wàre bei beiden Exen gleich.
Besteht also theoretisch die Möglichkeit, dass beide Exen zur selben in
die Datei schreiben wollen, z. B. bei Multi-Core-PCs oder sowas und dass
es dadurch bei einer der beiden Exen nicht klappt und ein Fehler
auftritt? Normal hàtte ich gesagt, das geht nicht, aber man weiß ja nie.
 

Lesen sie die antworten

#1 Thorsten Albers
30/01/2009 - 13:35 | Warnen spam
Tim Oppmann schrieb im Beitrag
...
Ich habe eine "Main"-Exe und eine Active-X-Exe als Verweis in der
"Main"-Exe, somit werden beide nebeneinander ausgeführt. Ich hàtte
gerne, dass beide ihre Fehler in dieselbe Datei schreiben können. Aber
ich weiß nicht, ob es da Probleme geben kann.
Jede der beiden Exen hat die folgende Funktion, um Fehler zu schreiben:

Public Sub WriteReport(ByVal sString As String)

Dim iFile%
iFile = FreeFile()

Open m_sPath For Append As #iFile

Print #iFile, date & " " & Time & " - " & sString
Close #iFile

End Sub

m_sPath wàre bei beiden Exen gleich.
Besteht also theoretisch die Möglichkeit, dass beide Exen zur selben in
die Datei schreiben wollen, z. B. bei Multi-Core-PCs oder sowas und dass
es dadurch bei einer der beiden Exen nicht klappt und ein Fehler
auftritt? Normal hàtte ich gesagt, das geht nicht, aber man weiß ja nie.



Es können nicht beide zur selben Zeit in die Datei schreiben, aber es
können beide zur selben Zeit in die Datei schreiben wollen! Das wird dann
zu einem Fehlerabbruch in dem einen oder dem anderen Prozeß führen.
Willst Du das verhindern, mußt Du die Open-Anweisung um die Angabe 'Shared'
ergànzen. Dann hast Du allerdings das Problem, das der Dateiinhalt
möglicherweise durcheinandergeràt: 'For Append' bedeutet, daß
Schreiboperationen am Ende der Datei erfolgen. Jeder Prozess führt aber
seinen eigenen Dateizeiger, so daß das Dateiende für jeden Prozeß immer
relativ zu seinen Schreiboperationen ist.

Ich würde anders vorgehen:
Jeder Prozeß öffnet die Datei zum exklusiven Schreiben, wenn er etwas
anfügen will ('Open ... Lock Write ...'). Dabei fàngst Du mit 'On Error'
jeden bei Open auftretenden Fehler ab (was Du ohnehin tun solltest). Ist es
der Fehler, der auftritt, wenn eine bereits für exklusives Schreiben
geöffnete Datei zum Schreiben geöffnet werden soll (leider weiß ich gerade
die Nummer nicht... 55? 70?), wird in einer Schleife solange erneut
versucht, die Datei zu öffnen, bis das entweder erfolgreich war, oder bis
ein vorher festgelegtes Zeitlimit erreicht wurde (etwa 10-20 Sekunden).

Thorsten Albers

albers (a) uni-freiburg.de

Ähnliche fragen