后台处理文件 IO 操作的合适方法是什么?

What's an appropriate way to background process file IO operations?

我目前正在使用 FileSystemWatcher 来发现文件何时到达文件夹。然而,锁定的文件是一个问题,所以我想尝试不同的方法,但仍然使用 FileSystemWatcher,当然除非使用睡眠定时器和主动查找在实践中效果更好,但我宁愿避免这种情况。

我想做的是捕获一个已到达的文件名并将其放入文件列表中,或者为它创建一个 ThreadPool 任务或其他。这个想法是我可以确保文件的处理可以与文件观察器分离。

处理基本就可以了。文件到达,读取它,附加到它,然后保存一个新文件。同时把刚到的文件移开。

在 .net 中使用 C# 处理此类事情的实践方法是什么?

文件不是那么大,使用 CsvHelper 将 CSV 数据提取到 List<dtoobject> 中,然后使用它来创建一个新的 DTO 对象列表,其中有一个额外的列,然后写入新列表作为新的 CSV。

大多数传入的 CSV 文件小于 500KB,其中许多小于 100KB。输出文件并没有那么大。

该软件将 运行 在某人的笔记本电脑上,一次处理少量文件。

我一直在探索各种选择,但开始感到困惑,不确定哪种方法最好。

这最初会 运行 在控制台应用程序中,但最终我可能会把它放在服务中。

你总结得很好。

如果您想要处理所有文件,我会推荐一些东西:

  • 不要仅仅依赖文件观察器;如果由于要重试的锁定文件而失败,您想恢复。
  • 不要仅仅依靠on-the-fly处理;您的服务可能已关闭。

您可以做的是:

  • 确保跟踪已处理的文件。
  • 添加您可以 运行 定期处理文件夹中所有未处理文件的代码。在应用程序启动时以特定时间间隔调用此代码。
  • 使用file-watcher作为处理单个文件的触发器。如果失败,您可以实施重试策略或回退到前面提到的机制。

我建议您开始尝试实施这些。如果您 运行 有任何具体问题,请提出一个新问题。