C#-IO-文件读写并显示文件读取进度

本文介绍如何在C#中实现文件的读写功能,并通过控制台实时显示文件传输进度。通过定义文件流,计算文件读取比例,绘制进度条,使文件传输过程可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#:文件读写并显示文件读取进度

之前在编写在控制台Fanuc程序传输时发现一个问题,当我用Python调用接口进行文件传输时,总是不知道文件读取了多少,还要多久才能读取完成,搞的一开始总以为程序挂了,为了方便查看传输进度,今天我们做个文件读写进度条,下面是动态演示图:

方法/步骤

首先我们定义个源文件路径,并获取到文件名,然后制定一个存储路径并获取路径中的文件名,将其与提取的文件名进行比对,如果已存在我们就将其删除掉。

string filepath = @"E:\Adobe Photoshop CS6.zip";

string filename = Path.GetFileName(filepath);

string saveDir = @"E:\UG";

string savePath = saveDir +"\\"+ filename;

DirectoryInfo sp = new DirectoryInfo(saveDir);

FileSystemInfo[] fi = sp.GetFileSystemInfos();

foreach (FileSystemInfo i in fi){

    if (i.Name == filename){

        i.Delete();

    }

}

 

下面我们开始定义读写文件流,并获取文件的大小,下面我们定义几个变量来记录每次读取的位置和读取的长度,以及剩余的读取大小等。

FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate,FileAccess.Read);  

FileStream wr = new FileStream(savePath,FileMode.OpenOrCreate,FileAccess.Write);

long count = fs.Length;//文件长度  

int start = 0;//开始读取

int num = 0; //每次读取的长度

long end = count;//剩余读取长度

double prePercent = 0;//进度条

 

现在我们来绘制进度条背景,我们设置进度条 长度为50,颜色为绿色,直接打印空格填充背景即可。

ConsoleColor colorBack = Console.BackgroundColor;

ConsoleColor colorFore = Console.ForegroundColor;

if (count > 0)

{

    //绘制读条背景界面

    Console.WriteLine("********************* Loading *********************");

    Console.BackgroundColor = ConsoleColor.DarkCyan;//设置背景色

    for (int i = 0; ++i <= 50; ){

        Console.Write(" ");//打印空格

    }

    Console.WriteLine(" ");

    Console.BackgroundColor = colorBack;//还原背景色

    Console.WriteLine("0%");

    Console.WriteLine("***************************************************");

}

 

 

  1. 4

    接下来我们开始实现读写功能,获取文件的开始位置,判断下剩余文件大小,如果不足一个bytes空间,则num等于实际剩余空间大小,否则就以每个bytes大小传输,直到剩余大小为0结束,同时我们进行写入操作,将文件分段写入到指定文件目录中去。

    while (end > 0)

        {

            fs.Position = start;

            if (end < maxlength)

                num = fs.Read(bytes, 0, Convert.ToInt32(end));//读取文件

            else 

                num = fs.Read(bytes, 0, maxlength);//读取文件

            wr.Write(bytes, 0, num);//写入文件

            if (num == 0)

                break;

            start += num;

            end -= num;

        }

        fs.Close();

        wr.Close();

        fs.Dispose();

        Console.WriteLine(" Finished Reading !");

        Console.ReadLine();

    }

     

  2. 5

    这是我们还看不到读写进度,因为我们还没有对每次读取的数据进行呈现,从上面的代码可以看出我们记录了每次传输的大小,已经传输了多少,还剩多少我们现在都知道了,接下来我们就利用已经传输的文件大小和总大小值进行计算,来获取我们每次传输的文件比例,并将其绘制成进度条显示出来。

     

  3. 6

    我们将传输的值进行计算,得到小数再将其乘上100换算成百分数并取整数Math.Ceiling(percent * 100),接下来就是更新进度条了,跟上面一样,我们定义背景色,光标移动随着我们的传输比例进行移动即可。

     

  4. 7

    最后别忘了关闭文件流,否则文件写入时会出现错误(少了一个bytes的内容导致文件错误,无法使用),切记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值