【问题标题】:If directory exists in a VB.NET code如果目录存在于 VB.NET 代码中
【发布时间】:2017-02-27 08:03:13
【问题描述】:

我有以下代码来创建一个目录,任务接受一个记录计数,每次记录计数达到所需的数量,比如 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

【问题讨论】:

  • recordcount 设置为硬编码的小数字,例如5、不要吞下try...catch中可能出现的异常,在for each循环中设置断点,检查你的计数器变量和if语句,调试你的代码,修复错误。
  • 你检查目标目录是否存在...但是不要费心计算其中的文件数,然后无论如何移动文件。

标签: vb.net file path directory


【解决方案1】:

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

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 语句并将它们放在一个位置。

【讨论】:

  • 很高兴我能帮上忙
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多