c# - 多个线程安全地附加单个文件
问题描述
在 .Net Framework 中,如何安全地让多个线程写入单个文件?
如果有帮助,这里有一些上下文,但以上是我的主要目标。
- 每个线程将附加一行。只要每个输出都有自己的行,它不是特定于顺序的
- 对于上下文,线程可能会尝试每秒最多写入 1 次。在某些情况下,它将是每几分钟一次
- 我还想锁定文件,以便其他用户/应用程序在运行时无法编辑它
这段代码会起作用吗?
private void button1_Click(object sender, EventArgs e) {
Thread t1 = new Thread(DoIt);
Thread t2 = new Thread(DoIt);
t1.Start("a");
t2.Start("b");
Thread.Sleep(2000);
Environment.Exit(0);
}
private void DoIt(object p) {
using (FileStream fs = new FileStream(FileName, FileMode.Open, FileSystemRights.AppendData,
FileShare.Write, 4096, FileOptions.None)) {
using (StreamWriter writer = new StreamWriter(fs)) {
writer.AutoFlush = true;
for (int i = 0; i < 20; ++i)
writer.WriteLine("{0}: {1:D3} {2:o} hello", p, i, DateTime.Now);
}
}
}
解决方案
Make a singleton File with Interface
interface IFile{
void Open(string Filename)
void CheckOPEN()
void Close()
void Write(string Text) // Check if file is opened using CheckOPEN() if not OPEN and //write
}
While Inheriting write all code in each function inside the lock statement
lock (x)
{
// Your code...
}
推荐阅读
- javascript - 如何在字符串连接时使变量可选?
- jquery - $ 未定义 Laravel 5.8
- java - 使用 requestbody 和 authenticationprincipal 调用 rest api
- matlab - 如何将 MATLAB m 文件的编码设置为 UTF8
- java - 为什么在将 CGLIB 原型注入 Singleton 的情况下,每次访问原型都会创建一个新对象?
- java - 如何为游戏生成随机伤害点?- 爪哇
- java - 向 Boomi - Java/“Groovy”脚本映射函数中没有偏移量的日期字符串添加偏移量
- php - 如何在 Laravel 中为路由添加“admin”前缀?
- php - 如何对数组进行分组和挂载选择
- java - 如何根据行对象条件 NatTable 为行标题单元格设置标签