【发布时间】:2015-05-21 13:43:28
【问题描述】:
我有一种情况,我有多个以 YearMonthDate 约定格式命名的文件,我想移动到基于月份的目录中,然后移动到基于文件名中列出的日期的子目录中。在帮助下,我得出了以下结论:
Public Class Form1
Function MakeDirectoryPath(rootFolder As String, fileName As String) As String
Dim monthDirectory As String = DateAndTime.MonthName(Asc(fileName(2)) - 96)
Dim dayDirectory As String = fileName.Substring(3, 2)
Return IO.Path.Combine(rootFolder, monthDirectory, dayDirectory)
End Function
Sub CreateDirectory(rootSource As String, rootDestination As String)
For Each s As String In IO.Directory.GetFiles(rootSource)
Dim fileName As String = IO.Path.GetFileName(s)
Dim destinationDirectory As String = MakeDirectoryPath(rootDestination, fileName)
If Not IO.Directory.Exists(destinationDirectory) Then
IO.Directory.CreateDirectory(destinationDirectory)
End If
**IO.File.Move(s, destinationDirectory)**
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
CreateDirectory(".....", "......")
End Sub
End Class
函数从文件名中提取我想要的内容,Sub CreateDirectory 创建我的月份目录,然后创建我的子目录。我遇到的问题是将实际文件移动到他们尊重的目录中。
简单地放下 IO.File.Move(destinationDirectory) 由于目录已经存在,在 For Each 循环中会产生一个异常,并且我对 IO.File.Copy() 的运气没有更好。
我们将不胜感激。
【问题讨论】:
-
File.Move 有什么异常?您真的要移动它,还是只是创建一个副本?
-
io.file.move 需要两个参数——源文件名和目标文件名。因此,请将 IO.File.Move 行放在您想要的代码中,按照您认为需要的方式,然后我们可能会告诉您哪里出了问题。
-
在原始帖子的代码中添加了“IO.File.Move(s,destinationDirectory)”。我从中得到的异常是与“当该文件已存在时无法创建文件”相关的 System.IO.IOException。很可能是因为 IO.File.Move 正在尝试重新创建目录。我也希望移动文件,但正在考虑使用 IO.File.Copy 和 IO.File.Delete 作为解决我遇到的这个问题的草率方法。
标签: vb.net