目前,我们有一个应用程序可以从文件夹中挑选文件并对其进行处理。它很简单,但有两个相当重要的问题。处理只是将图像转换为base64字符串并将其放入数据库中。
问题
问题是在文件处理完毕后,它不再需要处理,出于性能原因,我们并不是真的希望它如此。
处理后移动文件也不是一个选项,因为这些图像文件需要始终在同一目录中供系统其他部分使用。
这个程序必须用VB.NET编写,因为它是已经使用它的产品的扩展。
理想解决方案
我们正在寻找的是一种跟踪哪些文件已被处理的方式,因此我们可以在运行应用程序时开发一种忽略列表。
答案 0 :(得分:2)
在表格中,对于处理的每个文件,存储文件名,文件大小(以及文件哈希,如果您需要更加确定文件)。现在,当您处理新文件时,可以将其与表条目进行比较(简单查询就可以)。使用散列可能会降低性能,但您可以更加确定已经处理过的文件。
答案 1 :(得分:1)
对于每个已处理的图像文件Image0001.ext
,处理完成后会创建第二个文件Image0001.ext.done
。在查找要处理的文件时,请对图像的扩展类型使用过滤器,并在找到每个文件名时检查是否存在.done
文件。
随着文件数量的增加,这种方法会逐渐变慢,但除非你移动(或删除)文件,否则这是不可避免的。在NTFS上你应该没问题,直到你熟悉了成千上万的文件。
编辑:我的方法是申请KISS:所有东西都在一个文件夹中,因此不能是大量的图像:我不需要每天每小时处理数百个文件(第一次运行可能会有所不同)。
编写控制台应用程序以转换一个文件(在命令行上传递)。留下来作为练习。
没有迹象表明转换的紧迫性:可以安排每15分钟运行一次(比方说)。也留作练习。
使用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 }