Performance 可归档文件夹的高效目录遍历

Performance 可归档文件夹的高效目录遍历,performance,vba,directory-structure,Performance,Vba,Directory Structure,有一个文件服务器我被要求清理奔腾4!有512兆内存!!。它将文件添加到由几个省组成的目录结构中,每个省目录中有城镇目录,每个城镇目录中有“报纸”目录,每个报纸目录中有“故事”目录,每个故事目录中有由主题和日期组成的字符串命名的文件。因此,每个文件如下所示: 水毒害牦牛2013-04-11.doc、疟疾高峰2012-01-05等。我必须过滤此集合,以查找3年内没有贡献的故事目录。该集合将每月过滤一次。每月新增约1000个新文件。该集合有80000个文件 我的解决方案是运行每个故事目录,并使用以下命

有一个文件服务器我被要求清理奔腾4!有512兆内存!!。它将文件添加到由几个省组成的目录结构中,每个省目录中有城镇目录,每个城镇目录中有“报纸”目录,每个报纸目录中有“故事”目录,每个故事目录中有由主题和日期组成的字符串命名的文件。因此,每个文件如下所示: 水毒害牦牛2013-04-11.doc、疟疾高峰2012-01-05等。我必须过滤此集合,以查找3年内没有贡献的故事目录。该集合将每月过滤一次。每月新增约1000个新文件。该集合有80000个文件

我的解决方案是运行每个故事目录,并使用以下命令检查每个文件的名称:

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年和2012年的月份。如果没有找到比当前更近的一个月,则移动整个故事目录。在Visual Basic中,这是通过更改特定故事目录中每个文件的路径名来实现的。这意味着我第三次再次运行story文件夹,这次为每个文件指定了不同的路径名

我的问题与该算法的正确设计有关。要知道文件夹是否可以存档,必须检查其内容的文件名。 如果我在开始时循环遍历整个集合,并将其加载到数组中以加快后续搜索,那么我将需要大量内存。另一方面,在每个目录中循环三次似乎是浪费。我觉得这个问题应该已经解决了,所以我问


虽然我必须使用VisualBasic,但这个问题背后的原则是基本的,适用于任何语言。尽管如此,请毫不犹豫地用另一种计算机语言用英语回复。

根据您对VB的使用情况,我们可以假设这是在Windows上吗?我们是否也可以假定文件存储在NTFS卷上?是和是。虽然我的问题似乎比这些细节所显示的更抽象,但我想知道为什么您会问。NTFS会记录文件系统的更改。与阅读80000个文件来查找已更改的文件不同,您可以阅读更改日志来更直接地告诉您哪些文件已更改。与其尝试更快地完成同样的工作,我建议你少做点工作。@aquagremlin,我将你的标签从[word vba]改为[vba],以确保更广泛的受众。关于你的问题的提示——你可以考虑使用文件和文件夹的对象和集合,在这里应该更好地使用。