按顺序重命名文件扩展名

时间:2012-07-24 19:25:33

标签: c# loops timer windows-services

Windows服务 - C# - VS2010

我有多个FileWatcher服务实例。每个人都在目录中查找不同的扩展名。我有一个单独的路由器服务,它监视zip文件的目录,并将扩展名重命名为服务所看到的值之一。

示例:

有问题的目录(所有FileWatcher Services监视此目录)包含以下文件:

a.zip,b.zip,c.zip

FileWatcher1查找* .000的扩展名,FileWatcher2查找* .001的扩展名,FileWatcher3查找* .002的扩展名

路由器将看到.zip文件并更改zip文件上的文件扩展名,但它应按顺序保留,以便将相同数量的工作委派给每个FileWatcher。

此外,如果删除了两个zip文件,则会更改a.zip - > a.000,和b.zip - > b.001,但是如果5分钟过去并且删除了另一批zip文件,它应该知道将下一个文件重命名为* .002。

我的一切工作正常,但现在我需要将顺序部分实现到路由器并且不确定最佳实现方式(当前路由器正在将每个扩展名更改为* .000,因此只有一个FileWatcher正在开始工作) 。我知道这可能被认为是一种廉价的方式,但这是我们目前真正需要的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

路由器是否可以保留一个计数器并为每个新文件执行mod 3(或N,其中N是观察者的数量)操作?

答案 1 :(得分:0)

也许以另一种方式来看待它。您是否考虑过拥有一个观察者然后使用线程池?我建议这样做的原因是你必须开始考虑字段的大小和复杂性来充分分配工作。您可能会开始将更多工作推送到.000,因为当它仍在忙于处理来自第一个作业的大量数据时它是下一个,而.001可以是免费的,因为它处理的是一个小文件。

如果你真的想绕开下一个扩展的问题,为什么不保留一个带有下一个扩展号的静态变量。我不是100%确定路由器Filewatcher是否会在一个接一个地看到新文件时运行多个线程,但我不这么认为。如果确实发生了这种情况,那么在访问静态变量时需要输入一些线程安全代码。