0

我有一个逻辑问题,只是需要更多的大脑来解决这个问题。

 For Each JobNode In JobNodes
                    Dim Source = JobNode.SelectNodes("Source")
                    For Each item As System.Xml.XmlNode In Source
                        Dim infoReader As System.IO.FileInfo

                        ''''Discerns whether a file or directory

                        If item.InnerText.Contains(".") Then 'is a file

                            If Dir$(item.InnerText) <> vbNullString Then
                                mySize += FileLen(item.InnerText)
                            End If


                            zip.AddFile(item.InnerText, "")


                            Dim numFiles2 = filenames.Count
                            mySize = BytesTO(mySize, convTo.MB)
                            Console.WriteLine("...Added all " & numFiles2 & " files. Total loose file collection size is " & Math.Round(mySize, 2) & " MB")
                            Console.WriteLine(vbCrLf)


                        Else 'is a directory

                            zip.AddDirectory(item.InnerText, GetLastDirName(item.InnerText & " "))
                            Dim dinfo As New DirectoryInfo(item.InnerText)
                            Dim sizeOfDir As Long = DirectorySize(dinfo, True)
                            Dim numFiles As Integer = CountFiles_FolderAndSubFolders(item.InnerText)

                            Console.WriteLine("...Added all " & numFiles & " files. Total directory size is {0:N2} MB", (CDbl(sizeOfDir)) / (1024 * 1024))
                            Console.WriteLine(vbCrLf)
                        End If

                    Next

这是我制作的备份程序的一部分。这是确定要添加到 zip 的对象是文件(IF 语句的第一部分)还是目录(IF 语句的 ELSE 部分)的部分。

我的问题是,我正在尝试添加此代码:

Dim numFiles2 = filenames.Count
mySize = BytesTO(mySize, convTo.MB)
Console.WriteLine("...Added all " & numFiles2 & " files. Total loose file collection size is " & Math.Round(mySize, 2) & " MB")
Console.WriteLine(vbCrLf)

就在zip.AddFile(item.innertext,"")部分之后。我想添加它,以便我可以从控制台打印信息。

问题是,如果我只是把它直接放在 之后zip.addfile(),它每次都会直接输出上面的代码。我只希望它在完成添加所有松散文件(或使用添加的文件)后打印出该部分(正上方zip.AddFile()

编辑:在顶部添加 for 循环以获得更多说明

4

1 回答 1

1

添加一个标志,然后在循环完成后查找它。似乎您正在循环文件而不是递归调用它。我猜你现在只有一个循环。

循环迭代之前:

Dim FilesBeingAdded as Boolean = False
Dim numFiles2 as Integer = 0  

迭代内部:

If item.InnerText.Contains(".") Then 'is a file
     If FilesBeingAdded = False Then
         FilesBeingAdded = true          
     End If

     If Dir$(item.InnerText) <> vbNullString Then
         mySize += FileLen(item.InnerText)
     End If

     zip.AddFile(item.InnerText, "")
     numFiles2 +=1

 Else 'is a directory
     zip.AddDirectory(item.InnerText, GetLastDirName(item.InnerText & " "))
     Dim dinfo As New DirectoryInfo(item.InnerText)
     Dim sizeOfDir As Long = DirectorySize(dinfo, True)
     Dim numFiles As Integer = CountFiles_FolderAndSubFolders(item.InnerText)

     Console.WriteLine("...Added all " & numFiles & " files. Total directory size is {0:N2} MB", (CDbl(sizeOfDir)) / (1024 * 1024))
     Console.WriteLine(vbCrLf)
End If

循环迭代后:

If FilesBeingAdded = True Then
   mySize = BytesTO(mySize, convTo.MB)
   Console.WriteLine("...Added all " & numFiles2 & " files. Total loose file collection size is " & Math.Round(mySize, 2) & " MB")
   Console.WriteLine(vbCrLf)
   mySize = 0
   numFiles2 = 0
   FilesBeingAdded = False
End If

因此,当它完成当前迭代时,它将记录它添加的文件的数量以及大小并将其打印到控制台。然后它将变量归零,以便内部循环的下一次迭代具有干净的值。我假设您在多个目录上运行它。通过检查FilesBeingAdded,您可以确保避免在目录不包含文件时显示丑陋的零计数输出的情况。

该解决方案对您如何输入这段代码进行了很多假设。如果我的假设不正确,请修改问题以提供更好的解决方案。

于 2013-03-22T15:11:06.587 回答