【问题标题】:Rename file extensions in a sequential order按顺序重命名文件扩展名
【发布时间】:2012-07-24 19:25:32
【问题描述】:

Windows 服务 - C# - VS2010

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

例子:

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

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 正在工作) .我知道这可能被认为是一种廉价的方式,但这是我们目前真正需要的。任何帮助将不胜感激。

【问题讨论】:

    标签: c# loops timer windows-services


    【解决方案1】:

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

    如果您真的想解决下一个分机号码的问题,为什么不保留一个带有下一个分机号码的静态变量。我不是 100% 确定 Router Filewatcher 是否会在一个接一个地看到新文件时运行多个线程,但我不这么认为。如果确实发生了这种情况,那么您将需要在访问静态变量时添加一些线程安全代码。

    【讨论】:

    • 谢谢。所有将被删除的文件的大小或数据都不是很大,但是我们已经放弃了创建线程池的想法以供进一步使用。这篇文章更像是一个概念证明,它可以在没有太多工作的情况下快速完成工作。我实现了静态变量,不知道为什么我没有早点想到它,但是我的思绪此刻已经埋在了其他的火堆中,有点脑残。谢谢你的意见,你让我回到了正确的轨道上。 :)
    • 也发生在我身上。几天前,我对一个与该问题无关的问题发表了评论。我责怪太多的工作:)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 2020-10-20
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 2018-01-11
      • 2017-07-05
      相关资源
      最近更新 更多