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

フラグを追加し、ループが完了した後でそれを探します。これを再帰的に呼び出すのではなく、ファイルをループしているように見えます。現在、ループは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 に答える