【问题标题】:Move all files in folder but not delete folder in VB .NET移动文件夹中的所有文件,但不删除 VB .NET 中的文件夹
【发布时间】:2012-04-26 09:37:26
【问题描述】:

我需要知道如何将文件夹内的所有文件(例如:C:\Folder1)移动到另一个文件夹(例如:C:\Folder2),但不能删除 Folder1 并获取已移动的项目数量,让我解释一下;

我需要移动 Folder1 中的所有项目(文件、文件夹、子文件夹、子文件等)维护目录结构,但不删除 Folder1,如果可能的话,我需要知道移动了多少文件夹和多少文件(只有文件夹数和文件数)。

有人可以帮我吗? 提前谢谢你。

【问题讨论】:

  • 如果您移动文件和文件夹但不删除原始文件,那么您不是在移动,而是在复制。
  • 我正在尝试处理文件和文件夹,但不删除包含文件和文件夹的文件夹,@Steve 解决了这个问题

标签: .net vb.net


【解决方案1】:

你可以试试这个递归过程。

Public Shared Function moveDirectoryContent(srcDir As String, destDir As String) as Integer
    Dim countFile As Integer = 0
    If (Not Directory.Exists(destDir)) Then
        Directory.CreateDirectory(destDir)
    End If
    Dim listFiles() As String = Directory.GetFileSystemEntries(srcDir)
    Dim curFile As String

    For Each curFile In listFiles
        If Directory.Exists(curFile) Then
            countFile = countFile + moveDirectoryContent(curFile, Path.Combine(destDir, Path.GetFileName(curFile)))
        Else
            Dim dstFile = Path.Combine(destDir, Path.GetFileName(curFile))
            If File.Exists(dstFile) Then
                dstFile = GetUniqueName(dstFile)
            End If
            File.Copy(curFile, dstFile)
            File.Delete(curFile)
            countFile = countFile + 1
        End If
    Next
    Return countFile
End Function


Public Shared Function GetUniqueName(srcFile as String) as String
    Dim uFile As String = Path.GetFileNameWithoutExtension(srcFile)
    Dim ext as String = Path.GetExtension(srcFile)
    Dim cnt As Integer = 0
    Dim uniqueText = string.Format("_{0}_00", DateTime.ToDay.ToString("yyyy_MM_dd"))
    While(File.Exists(uFile + uniqueText + ext))
        cnt = cnt + 1
        uniqueText = string.Format("_{0}_{1:D2}", DateTime.ToDay.ToString("yyyy_MM_dd"), cnt)
    End While
    Return Path.GetDirectoryName(srcFile) + "\" + uFile + uniqueText + ext
End Function

并以这种方式调用

numMoved = moveDirectoryContent("C:\temp", "C:\temp2")

注意,目标文件夹不能在源文件夹内....(不执行检查)

【讨论】:

  • 有什么办法不覆盖文件,我的意思是如果文件存在更改新文件的名称,如果文件夹存在覆盖但里面没有文件,重点是合并文件夹但不覆盖文件,只需更改名称并移动它,有什么办法吗?
  • 答案已更新,添加了一种在目标文件夹中生成唯一文件的新方法,用于删除已存在的文件。
  • 它没有找到这个函数:“moveDirectory”在那部分:“countFile = countFile + moveDirectory(curFile, Path.Combine(destDir, Path.GetFileName(curFile)))”我想我应该改变为此:“moveDirectoryContent”但不起作用,如果文件存在于命运文件夹中,只能删除它,知道吗?
  • 但不起作用,它只删除文件,而不是重命名文件并移动它,如果存在于命运文件夹中,它只是删除它(或移动覆盖,我不太确定),知道吗?
  • @MySelf 好的,是时候启动 VS 并开始一点调试了。立即尝试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多