VB.NET中,如何实现FileStreamStreamWriter的线程安全文件并发操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计372个文字,预计阅读时间需要2分钟。
我正在编写一个审计文件,该文件记录每个用户使用我的应用程序时,应用程序中几个变量的用户名、时间和旧/新值。它使用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一样使用.
本文共计372个文字,预计阅读时间需要2分钟。
我正在编写一个审计文件,该文件记录每个用户使用我的应用程序时,应用程序中几个变量的用户名、时间和旧/新值。它使用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一样使用.

