0

我正在尝试将字符串“XYZ”添加到每个文件名,然后将我的文件从文件夹 A 移动到文件夹 B。这是我到目前为止的代码。


Private Const varSourceAddress As String = "\\serverA\drivename\FolderA\"
Dim diaddr As New DirectoryInfo(varSourceAddress)
Dim fiaddr As FileInfo() = diaddr.GetFiles()

While diaddr.GetFiles.Length > 0
  For Each scannedFile As FileInfo In fiaddr
    If scannedFile.Name.Contains("Thumbs") = False Then
      If scannedFile.Exists Then
         strOldName = scannedFile.Name
         strNewName = strOldName.Insert(14, "XYZ")
         scannedFile.CopyTo("\\serverA\drivename\FolderB\" & strNewName, True)
         scannedFile.Delete()

         strOldName = ""
         strNewName = ""

      End If
     End If
    Next
  End While

我在 Windows 服务中使用此代码。当服务第一次运行时,一切都按照预期的方式发生。它确实将 XYZ 添加到每个文件的名称中,并且文件也被移动到文件夹 B。但是,在第二次运行时,它会发送一条错误消息:

System.IO.FileNotFoundException: Could not find file '\\serverA\drivename\folderA\20130327082003.pdf'.

我可以看到该文件20130327082003.pdf已被移动到文件夹 B,新名称为20130327082003XYZ.pdf文件夹 B,这一切都很好,但服务会不断检查文件夹 A 中的相同文件名。

我也尝试过重命名、移动、复制、复制到所有这些命令,但是系统不检查文件夹 A 中的新文件(如果有),而是继续检查已移动到文件夹 B 的文件。不知何故,循环不断引用它已重命名(并且已经移动)到文件夹B的最后一个文件。

一旦将文件复制到文件夹B,我正在使用.Delete方法删除文件(或任何引用),但这似乎没有任何区别。

一旦服务将运行,最终假设将文件夹A中生成的每个新文件(在其名称中添加XYZ之后)移动到文件夹B。

任何帮助将不胜感激。谢谢你。

4

1 回答 1

0

您有两个循环,一个在另一个,外部循环 (while) 继续,直到 GetFiles() 不再返回文件,但在内部循环中,您使用在fiaddr 循环外获得的变量。

我认为您的循环次数超出了必要

Private Const varSourceAddress As String = "\\serverA\drivename\FolderA\"
Dim diaddr As New DirectoryInfo(varSourceAddress)
Dim fiaddr As FileInfo() = diaddr.GetFiles()

For Each scannedFile As FileInfo In fiaddr
    If scannedFile.Exists Then ' not sure it is necessary unless someone adds files externally
        If scannedFile.Name.Contains("Thumbs") = False Then
            strOldName = scannedFile.Name
            strNewName = strOldName.Insert(14, "XYZ")
            scannedFile.CopyTo("\\serverA\drivename\FolderB\" & strNewName, True)
            scannedFile.Delete()
            strOldName = ""
            strNewName = ""
        End If
    End If
 Next
于 2013-03-28T21:08:23.867 回答