我正在编写一个审计文件,该文件在每个用户使用我的应用程序时为应用程序编写应用程序中的几个变量的用户名,时间和旧/更改值.它使用FileStream和StreamWriter来访问审计文件.每个用户的
问题是,当两个用户同时更新此审计文件时,每个变量的“旧值”在用户之间混淆.为什么这样,你怎么解决这里的并发问题?
一些代码,为简洁而缩短……
Dim fs As FileStream Dim w As StreamWriter Public Sub WriteAudit(ByVal filename As String, ByVal username As String, ByVal oldAddress As String, ByVal newAddress As String, ByVal oldCity As String, ByVal newCity As String) Dim now As DateTime = DateTime.Now Dim audit As String = "" audit += now + "," + username + "," + oldAddress + "," + newAddress + "," + oldCity + "," + newCity fs = New FileStream(filename, FileMode.Append) w = New StreamWriter(fs) w.WriteLine(audit) w.Close() fs.Close() End Sub
它存在于AuditLogger类中,该类通过实例变量引用(每次访问函数时重新分配).
你可以试试这个:TextWriter tw = TextWriter.Synchronized(File.AppendText(filePath));
File.AppendText()方法返回一个StreamWriter对象,TextWriter.Synchronized()方法包装该对象以创建一个线程安全的TextWriter,它可以像StreamWriter一样使用.