我有 3 或 4 個人試圖同時寫入文本檔案的情況。我想在寫入檔案時只允許 1 個用戶。
我試過了:
Dim FNum As Integer
FNum = FreeFile()
Open "\\SHARE\Logs\File.log" For Append As FNum
Print #FNum, Now() & "> The user " & GetUserName() & " wrote something."
Close #FNum
它可以防止許多沖突,但不是全部。
在我的 File.log 中,我注意到同時有一些寫入:
2022-10-31 11:35:22 > The user USER1 wrote something.
omething.
2022-10-31 11:35:23 > The user USER2 wrote something.
2022-10-31 11:35:27 > The user USER3 wrote something.
2022-10-31 11:36:02 > The user USER4 wrote something.
R6 wrote something.
2022-10-31 11:36:11 > The user USER7 wrote something.
下面的沖突行是不完整的(只寫了行尾的一些字符)。
有沒有辦法防止這種情況發生?我希望第一個訪問該檔案的用戶被允許寫入它,而其他人應該在嘗試寫入該檔案時出錯,直到第一個用戶完成他的寫入。
謝謝!
我認為打開檔案會鎖定它直到寫入結束,但顯然網路上的用戶不知道檔案已經打開。
uj5u.com熱心網友回復:
默認情況下,VBA 在共享模式下打開檔案。您可以在打開檔案時指定鎖定模式:
FNum = FreeFile()
Open "\\SHARE\Logs\File.log" For Append Lock Write As FNum
Print #FNum, Now() & "> The user " & GetUserName() & " wrote something."
Close #FNum
正如 Jaspal 在評論中所說,您也可以在使用Lock陳述句打開后使用鎖。如果您想鎖定檔案的特定部分而不是整個檔案,或者對檔案做的不僅僅是打開-寫入-關閉,這主要有用。
uj5u.com熱心網友回復:
嘗試FileSystemObject改用。它有不同的行為,它可能會更好地處理鎖。使用此方法時我從未見過您的問題。
Sub OpenTextFileTest()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
With fso.OpenTextFile("\\SHARE\Logs\File.log", ForAppending, True, TristateFalse)
.Write Now() & "> The user " & GetUserName() & " wrote something."
.Close
End With
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/535583.html
上一篇:每月的DateAdd函式丟失月末資訊(MicrosoftAccess)
下一篇:訪問,對于每個記錄行
