加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:14:06 所属栏目:百科 来源:网络整理
导读:我正在编写一个审计文件,该文件在每个用户使用我的应用程序时为应用程序编写应用程序中的几个变量的用户名,时间和旧/更改值.它使用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一样使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读