有一个文件服务器我被要求清理(Pentium 4!512 meg的RAM!)。它将文件添加到由几个省组成的目录结构中,每个省目录中都是城镇目录,每个城镇目录中的文件都是“报纸”。每个报纸目录中的目录都是故事'目录,以及每个故事目录中的文件是由包含主题和日期的字符串命名的文件。所以每个文件看起来像这样: 水毒药牦牛2013-04-11.doc,疟疾峰值2012-01-05等我必须过滤这个集合为不活跃的故事目录(3年内没有贡献)。该集合每月过滤一次。每月大约增加1000个新文件。该系列有80,000个文件。
我的解决方案是遍历每个故事目录并使用以下命令检查每个文件的名称:
Sub LoopThroughFiles(storyfolder)
Dim MyObj As Object, MySource As Object, file As Variant
file = Dir(storyfolder)
While (file <> "")
If (InStr(file, "2013") Or InStr(file, "2014") > 0) Then
MsgBox "recent file found. move on to next directory"
recentDir = True
Exit Sub
End If
file = Dir
Wend
End Sub
检查2013或2014年是否在文件名中。如果找不到那些年份,那么我会再次浏览故事文件夹,以类似的方式检查2012年和月份。如果找不到比当前更新的月份,则移动整个故事目录。在Visual Basic中,这是通过更改该特定故事目录中每个文件的路径名来实现的。所以这意味着我再次浏览故事文件夹(第三次),这次为每个文件分配不同的路径名。
我的问题与此算法的正确设计有关。要知道文件夹是否可以存档,必须检查其内容的文件名。 如果我在开始时循环遍历整个集合并将其加载到一个数组中(以使后续搜索更快),那么我将需要大量内存。另一方面,循环遍历每个目录三次似乎很浪费。我觉得这个问题应该已经解决了,所以我问。
虽然我必须使用visual basic,但这个问题背后的原则是基本的,适用于任何语言。不要犹豫用另一种计算机语言(用英语)回复。