【问题标题】:moving oldest files first from source to destination首先将最旧的文件从源移动到目标
【发布时间】:2023-02-23 23:34:58
【问题描述】:

我在源中有超过 2000 个文件,我正在使用下面的代码移动它们。整个过程运行得非常好,但今天(两周后)当我再次开始移动文件时,它开始出错。错误是“运行时错误 58”“文件已经存在”

检查后,源文件夹和目标文件夹中没有这样的文件,所有文件名都彼此分开。即使我将 Source 文件夹清空(只是为了检查),它也会再次给出相同的错误。谁能告诉我我是否犯了任何错误,或者为什么即使两个文件夹都是空的也会出现这样的错误。

Function OldestFile(strFold As String) As String
Dim FSO As Object, Folder As Object, File As Object, oldF As String
 Dim lastFile As Date: lastFile = Now
   Set FSO = CreateObject("Scripting.FileSystemObject")
   Set Folder = FSO.GetFolder(strFold)
   For Each File In Folder.Files
        If File.DateCreated < lastFile Then
            lastFile = File.DateCreated: oldF = File.Name
        End If
   Next
   OldestFile = oldF
End Function


Sub MoveOldestFile()
    Dim FromPath As String, ToPath As String, fileName As String, limit As Long
    FromPath = "C:\Users\user\Desktop\Source\"
    ToPath = "C:\Users\user\Desktop\Destination\"
    limit = 20
    filesmoved = 0
    fileName = OldestFile(FromPath)
   Do Until fileName = "" Or filesmoved = limit
      If Dir(ToPath & fileName) = "" Then
            Name FromPath & fileName As ToPath & fileName
          
            filesmoved = filesmoved + 1
        End If
        fileName = OldestFile(FromPath)
    Loop
End Sub

【问题讨论】:

  • 你能举一个发生这个错误的文件名的例子吗?可能是短文件名的问题
  • 文件名是(例如)north East Feb 23, 2023 - In process
  • 但问题是即使两个(源和目标)文件夹都是空的,它仍然在 Name FromPath & fileName As ToPath & fileName 行给出相同的错误
  • 重命名时是否报错第一的文件或以后?
  • 不,先生。它在移动某些文件后开始出错(例如,当它移动 20 个文件时,从 1000 个开始出错)

标签: excel vba filesystemobject


【解决方案1】:

我不能说我理解你的代码的逻辑,因为它最终会移动全部文件,无论它们有多旧,那么通过先移动最旧的文件这一事实可以实现什么?

无论如何,您可以通过检查 file attribute 来跳过系统文件(如 desktop.ini)

Function OldestFile(strFold As String) As String
    Const ATTR_SYSTEM = 2
    Dim FSO As Object, Folder As Object, File As Object, oldF As String
    Dim lastFile As Date: lastFile = Now
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.GetFolder(strFold)
    For Each File In Folder.Files
        If (File.Attributes And ATTR_SYSTEM) = 0 And File.DateCreated < lastFile Then
            lastFile = File.DateCreated: oldF = File.Name
        End If
   Next
   OldestFile = oldF
End Function

【讨论】:

    【解决方案2】:

    更改以下行:

    If Dir(ToPath & fileName) = "" Then
    

    If Dir(ToPath & fileName, 7) = "" Then
    
    

    该行无法检查只读文件、系统文件或隐藏文件。所以你的代码试图重命名一个现有的隐藏文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多