在vb.net中移动一些具有相同扩展名的文件

时间:2012-10-04 05:48:51

标签: vb.net

第一个借口,因为我不是英国人,甚至英语也不是我的第二语言。 我想从一个文件夹中移动一些带有.txt扩展名的文件,例如F:\ From到另一个文件夹。 F:\要。使用VB.net 我不想移动所有文件,但其中一些文件,例如20或30并将其他人留在目标文件夹(F:\ To)。 例如,120个文本文件位于源文件夹(F:\ From)中,我可以将其中一半移动到目标文件夹(F:\ To),并将其他一半留在源文件夹中,即两个中的每一个文件夹(源和目标)应具有相同数量的文件。 实际上,目标文件夹中的文件数可能会更改,但我只想移动其中的一些文件,而不是所有文件。 谢谢。

2 个答案:

答案 0 :(得分:2)

你没有说哪个版本的VB.NET。使用最新版本(.NET Framework 4.0),您可以执行以下操作:

Dim filesToMove = From f In New DirectoryInfo("F:\From").EnumerateFiles("*.txt") _
         Where <insert condition selecting the files to move>

For Each f In filesToMove
    f.MoveTo("F:\To")
Next

对于较旧的框架,您需要使用.GetFiles,为此目的,它只具有不同的性能特征,如果您使用的是没有LINQ的旧VB.NET,则需要使用以下内容:< / p>

For Each f In New DirectoryInfo("F:\From").GetFiles("*.txt")
  If Not <condition selecting files> Then _
    Continue For

  f.MoveTo("F:\To")
Next

答案 1 :(得分:0)

谢谢马克赫德,你帮助我了。我尝试了以下代码,它可以工作:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim sourceDir = "F:\From"
    Dim destinationDir = "F:\To"

    ' get the filenames of txt files
    Dim SourceFiles = From f In Directory.GetFiles(sourceDir, "*.txt")
    Dim DestinationFiles = From f In Directory.GetFiles(destinationDir, "*.txt")

    'Calculate the difference in files between the two folders, and move files if the files
    'in source folder are more than the files of the destination folder
    Dim s As Integer
    s = SourceFiles.Count - DestinationFiles.Count

    'Find the remainder 
    Dim a = s Mod 2

    'If the remainder is zero, then divide the 
    If a = 0 Then
        Dim files = From f In Directory.GetFiles(sourceDir, "*.txt").Take(s / 2)

        If Not Directory.Exists(destinationDir) Then
            Directory.CreateDirectory(destinationDir)
        End If

        Dim n As Integer = 0
        For Each f In files

            File.Move(f, Path.Combine(destinationDir, Path.GetFileName(f)))
        Next
    Else
        Dim files = From f In Directory.GetFiles(sourceDir, "*.txt").Take((s + 1) / 2)
        If Not Directory.Exists(destinationDir) Then
            Directory.CreateDirectory(destinationDir)
        End If

        Dim n As Integer = 0
        For Each f In files

            File.Move(f, Path.Combine(destinationDir, Path.GetFileName(f)))
        Next
    End If
End Sub