DaLiMan Posted December 14, 2004 Posted December 14, 2004 Hi There, I have a little problem writing to a LOG file. Not the writing itself is the problem but it can be so that multiple users write at the same time. I checked this for a while and now and then the LOG file isn't added. (only 1 or 2 instead of 4 lines are written) My (test) script is as below. Is there anyone who can solve this problem? expandcollapse popup;~ =========================================Timer for starting 4 simultaniously ================================= Dim $Time = InputBox("","tijd?") Dim $TimeChk = 0 While $TimeChk = 0 $Time2 = @HOUR & ":" & @MIN If $Time = $Time2 Then $TimeChk = 1 EndIf Wend ;~ =================================================DIM all variables ================================= Dim $Versie = "3.2.1.1" ; This could be your script version Dim $Today = @MDAY & "-" & @MON & "-" & @YEAR Dim $Time = @HOUR & ":" & @MIN & ":" & @SEC Dim $Naam = "NAME1" ; Accually was - StringUpper(RegRead("HKEY_CURRENT_USER\SOFTWARE\CQR", "Naam")) Dim $Plaats = "PLAATS1" ; Accually was - StringUpper(RegRead("HKEY_CURRENT_USER\SOFTWARE\CQR", "Plaats")) Dim $Log = "\\NLF18S01\NLF18$\CQR\User\" & $Plaats & "-" & $Naam & ".TXT" Dim $Naam2 = "ALLUSERS" Dim $Plaats2 = "SOLAR" Dim $Log2 = "\\NLF18S01\NLF18$\CQR\User\" & $Plaats2 & "-" & $Naam2 & ".TXT" Dim $RunChk = IniRead("\\NLF18S01\NLF18$\CQR\User\CQR.ini", "Run","Solar", "") Dim $RunChk2 = IniRead("\\NLF18S01\NLF18$\CQR\User\CQR.ini", "Daniel","CQR", "") Dim $ScreenChk Dim $WriteChk = 0 ;~ ==============================INI-filecheck for USING=================================== ;~ =============================no INI-file or no right data is [NO USE]================================== If $RunChk <> "Y" Or $RunChk2 <> "Y" Then MsgBox(16,"CQRinvuller ©","Life could be so beautifull !!!" & $RunChk & " " & $RunChk2, 10) Exit EndIf ;~ ==================================================================================================== ============ $ScreenChk = "OVWR01" ; Accually was - StringReplace(ClipGet(), " ","") If $ScreenChk = "OVWR01" Then While $WriteChk = 0 $file = FileOpen($Log , 1) $file2 = FileOpen($Log2 , 1) ; Check if file opened for writing OK If $file = -1 or $file2 = -1 Then $WriteChk = 0 Else $WriteChk = 1 EndIf Wend FileWrite($file, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "ALL_OK_!" & @TAB & $Versie) FileWrite($file2, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "ALL_OK_!" & @TAB & $Versie) FileClose($file) $WriteChk = 0 ElseIf $ScreenChk = "OVWI02R" Then While $WriteChk = 0 $file = FileOpen($Log , 1) $file2 = FileOpen($Log2 , 1) ; Check if file opened for writing OK If $file = -1 or $file2 = -1 Then $WriteChk = 0 Else $WriteChk = 1 EndIf Wend FileWrite($file, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "OVWIO2R!" & @TAB & $Versie) FileWrite($file2, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "OVWIO2R!" & @TAB & $Versie) FileClose($file) $WriteChk = 0 Exit Else While $WriteChk = 0 $file = FileOpen($Log , 1) $file2 = FileOpen($Log2 , 1) ; Check if file opened for writing OK If $file = -1 or $file2 = -1 Then $WriteChk = 0 Else $WriteChk = 1 EndIf Wend FileWrite($file, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "VKSCHRM!" & @TAB & $Versie) FileWrite($file2, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "VKSCHRM!" & @TAB & $Versie) FileClose($file) $WriteChk = 0 Exit EndIf
kanumi Posted December 14, 2004 Posted December 14, 2004 (edited) The file is just locked during the open-write-close operation of one user, so the second trying to update the file at the same time will fail. Use either different files or retry the FileWrite on error e.g.: Do not use FileOpen and replace all Your FileWrite-calls with LogFileWrite and submit the filename instead of a filehadle as parameter and add: Func LogFileWrite($filename, $text) While 1 If 1 = FileWrite($filename, $text) Then ExitLoop Sleep(300) Wend EndFunc Edited December 14, 2004 by kanumi
DaLiMan Posted December 14, 2004 Author Posted December 14, 2004 You mean like below? $ScreenChk = "OVWR01" ; Accually was - StringReplace(ClipGet(), " ","") If $ScreenChk = "OVWR01" Then LogFileWrite($Log, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "ALL_OK_!" & @TAB & $Versie) LogFileWrite($Log2, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "ALL_OK_!" & @TAB & $Versie) ElseIf $ScreenChk = "OVWI02R" Then LogFileWrite($Log, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "OVWIO2R!" & @TAB & $Versie) LogFileWrite($Log2, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "OVWIO2R!" & @TAB & $Versie) Exit Else LogFileWrite($Log, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "VKSCHRM!" & @TAB & $Versie) LogFileWrite($Log2, @CRLF & $Today & @TAB & $Time & @TAB & $Naam & @TAB & $Plaats & @TAB & "VKSCHRM!" & @TAB & $Versie) EndIf Func LogFileWrite($filename, $text) While 1 If 1 = FileWrite($filename, $text) Then ExitLoop Sleep(300) Wend EndFunc I'm having a little trouble understanding what this function exactly does. Can U explain it to me?
DaLiMan Posted December 14, 2004 Author Posted December 14, 2004 Hi, I just tried this script for a couple of times, but without any luck. I keep missing entry's from 1 or 2 members. Is there something else we can try?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now