当前位置 : 主页 > 编程语言 > c语言 >

vb.net – 如何使用filestream / streamwriter处理并发文件访问?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正在编写一个审计文件,该文件在每个用户使用我的应用程序时为应用程序编写应用程序中的几个变量的用户名,时间和旧/更改值.它使用FileStream和StreamWriter来访问审计文件.每个用户的
我正在编写一个审计文件,该文件在每个用户使用我的应用程序时为应用程序编写应用程序中的几个变量的用户名,时间和旧/更改值.它使用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一样使用.

网友评论