在写入文件之前写入缓冲区以避免被锁定

时间:2012-04-21 20:41:10

标签: c# io buffer

我目前正在开发一个c#项目,我需要将内容写入文件。在写入文件时,一个单独的线程访问该文件以获取文件大小,所以有时当我写入文件时它会被锁定,因为文件大小检查文件被锁定。

我想要做的是创建某种缓冲区,但每当我谷歌它,它回来关于网络流不适合作为其所有本地。计划是什么而不是直接写入文件的线程,它写入某种缓冲区,并且一个单独的线程检查文件是否可写,然后读取缓冲区并将内容写入文件。

另一个问题是我需要添加一个参数,以便当它写入文件时它会写入正确的文件,因为我的程序正在从多个位置接收输入,所以我需要将此值保留在缓冲区中的某个位置但是从我所见到的流你只能写字符串。

所以基本的问题是如何写入缓冲区然后从缓冲区读取,以便可以将其写入文件并在缓冲区中保留一个参数,以便在写入文件时知道哪个文件到写信给。

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

声明一个具有缓冲区空间和文件规范的类。为每次写入创建一个并将其排队到BackgroundWorker写入线程。线程使缓冲区实例出列,并使用合适的sleep()循环etry写入文件,以确保解决任何临时文件锁定。

您可以使用BlockingCollection作为队列。

答案 1 :(得分:0)

获取文件的长度不应该锁定文件。你是怎么做这个手术的?

如果使用缓冲区,则长度检查操作将不再为您提供正确的值。