3

コマンドを使用して、(データのバイトを手動でコピーせずに)大きなファイルのコピー手順の進行状況を監視しようとしていますFile.Copy([FileName])

だから私がやろうとしているのは、コピーされるファイルの長さを取得し、それを宛先ファイルの長さと比較することです。これは私にコピーの進捗状況の良い感覚を与えるでしょう。

唯一の問題はFileInfo.Length、宛先ファイルのプロパティが、ディスク上のファイルの実際のサイズではなく、コピーされるファイルの合計サイズを返すことです。このデータを取得する他の方法はありますか?ありがとう、クリス



編集(下から移動-OPによって回答として提出されました)

私はリンクを見ました、そしてそれは私が望むものではありません。ファイルが大きい場合(コピーに3秒以上かかる場合)にのみファイルコピーの進行状況を表示したいと思います。

大部分のファイルは約1/4秒かかりますが、ネットワーク経由でコピーするのに時間がかかる〜600+MBのファイルもいくつかあります。

必要なのは、宛先ディレクトリにある部分的にコピーされたファイルの実際のファイルサイズを取得する方法だけです。

(ここにアカウントがないため、質問への回答への返信を投稿できませんでした。そのため、そうではありませんが、回答として表示されています。)

ありがとう、クリス

4

1 に答える 1

0

ストリームを使用して自分でコピー操作を行い、進行状況を表示できます。

    Const SOURCE_FILEPATH = "C:\TEMP\GameOfThrones.png"
    Const DEST_FILEPATH = "C:\GameOfThrones.png"

    Const BUFFER_SIZE As Integer = 32767
    If System.IO.File.Exists(DEST_FILEPATH) Then System.IO.File.Delete(DEST_FILEPATH)
    Using inStream As New System.IO.FileStream(SOURCE_FILEPATH, IO.FileMode.Open, IO.FileAccess.Read)
        Dim offset As Integer = 0
        Dim count As Integer = BUFFER_SIZE
        Using outStream As New System.IO.FileStream(DEST_FILEPATH, IO.FileMode.Create, IO.FileAccess.Write)
            Do While offset + count <= inStream.Length AndAlso offset <> inStream.Length
                Dim buffer(count) As Byte
                inStream.Seek(offset, IO.SeekOrigin.Begin)
                inStream.Read(buffer, 0, buffer.Length - 1)
                outStream.Seek(outStream.Length, IO.SeekOrigin.Begin)
                outStream.Write(buffer, 0, buffer.Length - 1)
                offset += count
                If count + offset > inStream.Length Then
                    count = inStream.Length - offset
                Else
                    count = BUFFER_SIZE
                End If
                System.Console.WriteLine((offset / inStream.Length) * 100 & "% complete")
            Loop
        End Using
    End Using
于 2011-12-19T02:57:38.093 に答える