我正在尝试将字符串“XYZ”添加到每个文件名,然后将我的文件从folderA移动到folderB。 这是我到目前为止的代码。
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添加到每个文件的名称,文件也会移动到folderB。但是,在第二次运行时,它会发送一条错误消息:
System.IO.FileNotFoundException: Could not find file '\\serverA\drivename\folderA\20130327082003.pdf'.
我可以看到文件20130327082003.pdf
已经被移动到了具有新名称20130327082003XYZ.pdf
的folderB,这一切都很好,但是服务一直在检查文件夹A中的相同文件名。< / p>
我已尝试重命名,移动,复制,复制所有这些命令,但系统不会检查文件夹A中的新文件(如果有),而是继续检查已移动到folderB的文件。不知何故,循环不断引用它已重命名(并已移动)的最后一个文件到folderB。
我使用.Delete
方法删除文件(或任何引用),一旦将其复制到folderB,但这似乎没有任何区别。
一旦服务运行,最终它会假设将folderA中生成的每个新文件(在将XYZ添加到其名称之后)移动到folderB。
任何帮助将不胜感激。 谢谢。
答案 0 :(得分: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