处理文件 - 保持跟踪

时间:2014-05-01 08:39:02

标签: vb.net file-management

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

问题

问题是在文件处理完毕后,它不再需要处理,出于性能原因,我们并不是真的希望它如此。

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

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

理想解决方案

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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 }