相关疑难解决方法(0)

我可以使用.NET中的FileInfo.CopyTo()显示文件复制进度吗?

我在c#(.NET 2.0 Framework)中创建了一个复制实用程序,它复制文件,目录和递归子目录等.该程序有一个GUI,显示当前正在复制的文件,当前文件编号(序列),总数要复制的文件数和复制操作的完成百分比.还有一个进度条,它基于当前文件/总文件.

我的问题与复制大文件有关.我一直无法找到一种方法来指示大文件的总复制进度(使用我当前使用FileInfo.CopyTo方法的类结构).作为一种解决方法,我将文件复制操作和GUI显示分离到它们自己的线程,并设置一个视觉提示来显示正在完成的工作.至少用户知道程序没有被冻结并且仍在复制文件.

能够基于总字节数显示进度或者具有从FileInfo.CopyTo方法触发的某种类型的事件会更好,该方法指示从当前文件复制的总字节数.

我知道FileInfo.Length属性,所以我确信MacGuyver有一种基于此的事件,并且在GUI端有一个处理器读取更新的处理程序(可能基于检查FileInfo).使用某种类型的计时器的目标对象的长度属性?).

有谁知道我要忽视的方法.如果我可以避免它,我宁愿不重写我的类来通过流复制字节并以这种方式跟踪它(虽然我想我可能会坚持走那条路).

提前致谢

PS - 我现在一直坚持使用.NET 2.0框架,所以任何需要> = 3.0的功能的解决方案都不适合我.

PPS - 我对任何.NET语言的解决方案都很开放,而不仅仅是c#.

.net c# copy fileinfo

30
推荐指数
5
解决办法
4万
查看次数

以小块复制文件

我想以小块的形式复制文件(如果需要,取消复制操作).

我试图在这里遵循无标记的解决方案:如何复制具有取消副本的文件?

但我得到一个0字节的文件

我做错了什么?

Public Class Form1

   Dim cancelled As Boolean = Nothing
   Dim input = New System.IO.FileStream("C:\1.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
   Dim output = New System.IO.FileStream("C:\Nueva carpeta\1.txt", System.IO.FileMode.CreateNew, System.IO.FileAccess.Write, System.IO.FileShare.Write)

   Public Sub CopyStream(ByVal inputStream As System.IO.Stream, ByVal outputStream As System.IO.Stream)
       'Dim buffer = System.IO.File.ReadAllBytes("C:\1.txt")

       Dim buffer = New Byte((1024) - 1) {}
       Dim bytesRead As Integer = 1

       While (inputStream.Read(buffer, 0, buffer.Length) > 0)
           outputStream.Write(buffer, 0, bytesRead)
           'bytesRead += 1

           If cancelled Then
               MsgBox("operacion cancelada")
               Return
           End If
       End …
Run Code Online (Sandbox Code Playgroud)

.net vb.net file-io chunks visual-studio

1
推荐指数
1
解决办法
3690
查看次数

标签 统计

.net ×2

c# ×1

chunks ×1

copy ×1

file-io ×1

fileinfo ×1

vb.net ×1

visual-studio ×1