C# 我应该在追加写入之间保持文件处理程序打开吗?
我在一个涉及数据采集的项目中工作。下面描述了一个非常重要的必要条件:C# 我应该在追加写入之间保持文件处理程序打开吗?,c#,file-io,data-acquisition,C#,File Io,Data Acquisition,我在一个涉及数据采集的项目中工作。下面描述了一个非常重要的必要条件: 在录制开始时,必须创建一个文件,并写入其标题 一旦数据采集开始,应用程序应定期(通常每秒一次)将收集的数据保存到文件中 写入过程包括在文件中添加数据块,如果可能的话,采用原子方式 如果发生任何错误(程序错误、电源故障),文件必须保持有效,直到错误发生前的最后一次写入 因此,我计划使用一些线程来观察接收到的数据,并编写这个数据do文件,但我不知道哪种做法最好(下面的代码不是真实的,只是为了得到感觉): 第一种选择:单一开放式 u
using (var fs = new FileStream(filename, FileMode.CreateNew, FileAccess.Write))
fs.Write(headers, 0, headers.Length);
using (var fs = new FileStream(filename, FileMode.Append, FileAccess.Write))
{
while (acquisitionRunning)
{
Thread.Sleep(100);
if (getNewData(out _someData;))
{
fs.Write(_someData, 0, _someData.Length);
}
}
}
第二个选项:多个打开:
using (var fs = new FileStream(filename, FileMode.CreateNew, FileAccess.Write))
fs.Write(headers, 0, headers.Length);
while (acquisitionRunning)
{
Thread.Sleep(100);
if (getNewData(out _someData;))
{
using (var fs = new FileStream(filename, FileMode.Append, FileAccess.Write))
{
fs.Write(_someData, 0, _someData.Length);
}
}
}
应用程序应该在客户机中工作,而其他进程对文件的访问不应该引起关注。我最关心的是:
正如您所提到的,其他进程将不会访问该文件,因此保持它的打开状态不会使事情变得复杂,而且会更快。但是,请记住,如果应用程序崩溃,锁将保留在文件上,您可能需要根据您的场景相应地处理此问题。如您所述,其他进程将无法访问该文件,因此保持文件打开不会使事情复杂化,也会更快。但是,请记住,如果应用程序崩溃,锁将保留在文件上,您可能需要根据您的场景相应地处理此问题。如您所述,其他进程将无法访问该文件,因此保持文件打开不会使事情复杂化,也会更快。但是,请记住,如果应用程序崩溃,锁将保留在文件上,您可能需要根据您的场景相应地处理此问题。如您所述,其他进程将无法访问该文件,因此保持文件打开不会使事情复杂化,也会更快。但是,请记住,如果应用程序崩溃,锁将保留在文件上,您可能需要根据您的场景相应地处理此问题。在断电/etc时保留文件内容的一个好方法是在每次写入后刷新文件流。这将确保您刚刚写入流的内容立即写入磁盘。在断电/etc时保留文件内容的一个好方法是在每次写入后刷新文件流。这将确保您刚刚写入流的内容立即写入磁盘。在断电/etc时保留文件内容的一个好方法是在每次写入后刷新文件流。这将确保您刚刚写入流的内容立即写入磁盘。在断电/etc时保留文件内容的一个好方法是在每次写入后刷新文件流。这将确保您刚刚写入流的内容立即写入磁盘。密切相关,但使用perl(C#会有所不同吗?):问得好。1.多次打开和关闭文件会影响性能。e、 在硬盘上查找文件需要时间。2.我可以确认,如果将时间分散到对多个文件执行磁盘访问(读/写)时,其中一个文件因电源故障而损坏的可能性会增加。3.根据手头的具体问题,两者都可以使用。密切相关,但使用perl(C#会有所不同吗?):好问题。1.多次打开和关闭文件会影响性能。e、 在硬盘上查找文件需要时间。2.我可以确认,如果将时间分散到对多个文件执行磁盘访问(读/写)时,其中一个文件因电源故障而损坏的可能性会增加。3.根据手头的具体问题,两者都可以使用。密切相关,但使用perl(C#会有所不同吗?):好问题。1.多次打开和关闭文件会影响性能。e、 在硬盘上查找文件需要时间。2.我可以确认,如果将时间分散到对多个文件执行磁盘访问(读/写)时,其中一个文件因电源故障而损坏的可能性会增加。3.根据手头的具体问题,两者都可以使用。密切相关,但使用perl(C#会有所不同吗?):好问题。1.多次打开和关闭文件会影响性能。e、 在硬盘上查找文件需要时间。2.我可以确认,如果将时间分散到对多个文件执行磁盘访问(读/写)时,其中一个文件因电源故障而损坏的可能性会增加。3.根据手头的具体问题,可以使用这两种方法。除了锁定问题(我将研究一下如何处理这个问题)之外,自上次写入以来,文件内容的完整性是否会被保留?它可能会使文件处于损坏状态。但在某些情况下,这也是可以接受的。您可能应该检查log4net如何实现文件锁定。这将为您带来一些额外的选项和想法。除了锁定问题(我将研究一下如何处理这个问题),自上次写入以来,文件内容的完整性是否会被保留?它可能会使文件处于损坏状态。但在某些情况下,这也是可以接受的。您可能应该检查log4net如何实现文件锁定。这将为您带来一些额外的选择和想法。除了锁定问题(我将重新讨论)