如果 VB.NET 代码中存在目录

问题描述 投票:0回答:1

我有以下代码来创建一个目录,该任务接受一个记录计数,每次记录计数达到所需的数量(例如 1000 条记录)时,就会创建一个新目录。如果该任务第二次运行,它将另外添加 1000 条记录到现有目录,我希望它跳过这些现有目录并创建一个新目录。我尝试过添加各种 ifexists,但总是搞砸,任何帮助将不胜感激

Public Sub Main()

    Dim SourceDirectory As String = "E:\Data"
    Dim TargetDirectory As String = "E:\CN"
    Dim FileExtensionsToProcess As String = "CON*.pdf"
    Dim FileCounter As Integer = 0
    Dim FolderName As Integer = 1
    Dim recordcount As Integer
    recordcount = CInt(Dts.Variables("RecordCount").Value)

    For Each FileName As String In System.IO.Directory.GetFiles(SourceDirectory, FileExtensionsToProcess)
        Dim FileOnly As String = System.IO.Path.GetFileName(FileName)
        Try
            If Not IO.Directory.Exists(IO.Path.Combine(TargetDirectory, FolderName.ToString())) Then
                IO.Directory.CreateDirectory(IO.Path.Combine(TargetDirectory, FolderName.ToString()))
            End If
            IO.File.Move(FileName, IO.Path.Combine(TargetDirectory, IO.Path.Combine(FolderName.ToString(), FileOnly)))
        Catch
        End Try
        FileCounter += 1
        If (FileCounter Mod recordcount) = 0 Then
            FolderName += 1
        End If
    Next
    Dts.TaskResult = ScriptResults.Success
End Sub
vb.net file path directory
1个回答
0
投票

好的。完整的解决方案如下所示,然后我将解释其中的一些。

Public Sub Main()
    Dim SourceDirectory As String = "E:\Data"
    Dim TargetDirectory As String = "E:\CN"
    Dim FileExtensionsToProcess As String = "CON*.pdf"
    Dim FileCounter As Integer = 0
    Dim FolderName As Integer = 1
    Dim recordcount As Integer = CInt(Dts.Variables("RecordCount").Value)

    Dim targetDir As String = SetOutputFolder(TargetDirectory, FolderName, recordcount)

    For Each FileName As String In Directory.GetFiles(SourceDirectory, FileExtensionsToProcess)
        Dim FileOnly As String = Path.GetFileName(FileName)

        'Try - Leave this out to observe any exceptions, then add handling when you see any
        ' Check for file name conflicts before moving
        File.Move(FileName, Path.Combine(targetDir, FileOnly))  

        'Catch
        'End Try
        FileCounter += 1
        If FileCounter >= recordcount Then
            FolderName += 1
            targetDir = SetOutputFolder(TargetDirectory, FolderName, recordcount)
            FileCounter = Directory.GetFiles(targetDir).Count
        End If
    Next
End Sub

Private Function SetOutputFolder(baseDir As String, ByRef folderName As Integer, ByRef recordCount As Integer) As String
    Dim targetDir = Path.Combine(baseDir, folderName.ToString())
    Dim filecounter = 0

    While Directory.Exists(targetDir)
        filecounter = Directory.GetFiles(targetDir).Count
        If filecounter >= recordCount Then
            folderName += 1
            targetDir = Path.Combine(baseDir, folderName.ToString())
        Else
            Exit While
        End If
    End While

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

    Return targetDir
End Function

我创建的附加功能解决了一些问题。请注意,它将文件夹计数器和记录计数作为引用传递

ByRef folderName As Integer, ByRef recordCount As Integer
,因此在获取正确的目录后它可以继续使用正确的值。它将搜索目标目录,从 1 开始,对于找到的每个目录,它将检查它是否已满。如果是,那么它将继续,否则它将选择该目录。

在此期间,它还检查目录是否存在,如果不存在,则在退出之前创建它,这会删除整个过程中所需的额外

If
语句并将它们放在一个位置。

© www.soinside.com 2019 - 2024. All rights reserved.