DotNetZip循环逻辑的逻辑帮助

时间:2013-03-22 14:09:34

标签: vb.net zip logic dotnetzip

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

 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循环以获得更多说明

1 个答案:

答案 0 :(得分: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,您可以确保避免在目录中不包含任何文件时显示丑陋的零计数输出的情况。

这个解决方案假定你如何输入这段代码。如果我的推测不正确,请修改问题以便提供更好的解决方案。