c#在复制文件时使用进度条

本文关键字:复制 文件 | 更新日期: 2023-09-27 18:12:48

是否有人在复制文件时使用进度条工作的例子,或者可以引导我到这个问题被问到的地方?

    private void Transferfiles(DirectoryInfo source, DirectoryInfo target)
    {
        int e = 0
        if (Directory.Exists(target.FullName) == false)
        {
                Directory.CreateDirectory(target.FullName);
        }
        foreach (FileInfo eachhfile in source.GetFiles())
        {
                eachhfile.CopyTo(Path.Combine(target.ToString(), eachhfile .Name));
                BytesToKilobytes += ((eachhfile .Length / 1024) / 1024);
                e = BytesToKilobytes ;
                backgroundWorker1.ReportProgress(e); 
        }
        foreach (DirectoryInfo SubDirectory in source.GetDirectories())
        {
                DirectoryInfo newTargetDirectory =
                    target.CreateSubdirectory(diSourceSubDir.Name);
                Transferfiles(SubDirectory, newTargetDirectory );
        }
    }
以上是我到目前为止使用的代码。它有效,但并没有给我真正想要的。我正在寻找一种方法,使进度条更新为文件正在复制,使进度条将继续移动,直到文件已完成复制。

c#在复制文件时使用进度条

你可以检查你要移动到的文件夹的大小,并使用它作为进度条的当前值

(可能我误解了您的意思,因为您希望即使在单个大文件上也可以移动栏)?如果是这样的话,我没有快速的解决方案,甚至Windows也不会在文件资源管理器中管理它)

MSDN是你的朋友:

https://msdn.microsoft.com/de-de/library/system.windows.forms.progressbar (v = vs.110) . aspx

private void CopyWithProgress(string[] filenames)
    {
        // Display the ProgressBar control.
        pBar1.Visible = true;
        // Set Minimum to 1 to represent the first file being copied.
        pBar1.Minimum = 1;
        // Set Maximum to the total number of files to copy.
        pBar1.Maximum = filenames.Length;
        // Set the initial value of the ProgressBar.
        pBar1.Value = 1;
        // Set the Step property to a value of 1 to represent each file being copied.
        pBar1.Step = 1;
        // Loop through all files to copy.
        for (int x = 1; x <= filenames.Length; x++)
        {
            // Copy the file and increment the ProgressBar if successful.
            if(CopyFile(filenames[x-1]) == true)
            {
                // Perform the increment on the ProgressBar.
                pBar1.PerformStep();
            }
        }
    }

您需要自己实现复制代码(您不能使用FileCopy或类似的命令)。有关如何做到这一点的示例,请参阅本文。