【问题标题】:Processing Files - Keeping Track处理文件 - 跟踪
【发布时间】:2014-05-01 08:39:01
【问题描述】:

目前我们有一个从文件夹中挑选文件并处理它们的应用程序。这很简单,但它有两个非常重要的问题。该处理只是将图像转换为 base64 字符串并将其放入数据库。

问题

问题是文件被处理后,它不需要再次处理,出于性能原因,我们真的不希望这样。

在处理后移动文件也不是一种选择,因为这些图像文件需要始终位于同一目录中以供系统的其他部分使用。

这个程序必须用 VB.NET 编写,因为它是已经在使用它的产品的扩展。

理想的解决方案

我们真正寻找的是一种跟踪哪些文件已被处理的方法,以便我们可以在运行应用程序时开发一种忽略列表。

【问题讨论】:

  • 你试过什么?我觉得这应该是一个简单的问题 - 您可能只需将文件名存储在某个地方,数据库表或本地文件(无论您的系统易于读取的任何格式)并在运行时检查文件名是否已经在列表中...
  • 如果您以前做过,这很简单。大声笑

标签: vb.net file-management


【解决方案1】:

对于每个已处理的图像文件Image0001.ext,处理后创建第二个文件Image0001.ext.done。在查找要处理的文件时,对图像的扩展类型使用过滤器,并在找到每个文件名时检查是否存在 .done 文件。

随着文件数量的增加,这种方法会逐渐变慢,但除非您移动(或删除)文件,否则这是不可避免的。在 NTFS 上,您应该没问题,直到您熟悉数以万计的文件。

编辑:我的方法是申请 KISS:

  1. 所有内容都在一个文件夹中,因此不能包含大量图像:我不需要每天每小时处理数百个文件(第一次运行可能会有所不同)。

  2. 编写一个控制台应用程序来转换一个文件(在命令行上传递)是每个。留作练习。

  3. 没有任何转换紧迫性的迹象:可以安排每 15 分钟运行一次(比如说)。也留作练习。

  4. 使用 PowerShell 为所有尚未处理的图像运行程序:

    cd $TheImageFolder;
    # .png assumed as image type. Can have multiple filters here for more image types.
    Get-Item -filter *.png |
      Where-Object { -not (Test-File -path ($_.FullName + '.done') } |
      Foreach-Object { ProcessFile $_.FullName; New-Item ($_.FullName + '.done') -ItemType file } 
    

【讨论】:

    【解决方案2】:

    在一个表中,存储每个处理的文件的文件名、文件大小和文件哈希(如果您需要更确定文件)。现在,当您要处理一个新文件时,您可以将它与您的表条目进行比较(一个简单的查询就可以了)。使用哈希可能会降低您的性能,但您可以更加确定已处理的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-21
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多