zl程序教程

您现在的位置是:首页 >  其他

当前栏目

读取文件进度条

文件 读取 进度条
2023-09-11 14:21:07 时间
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <windows.h>

int main()
{
    int size=0;//文件的总大小
    int len=0;//当前读取数    
    char tmp[100];//临时数组,保存当前读取的内容
    int sum=0;//已读取的大小
    char cont[2048]={0};//保存整个文件内容
    int progress=20;//进度条的长度
    int current=0;//当时进度
    int i;//循环变量
    //1.打开文件及关闭文件
    FILE* pf = fopen("7_7.c","rb");//打开文件rb:读取二进制方式
    if(pf==NULL)//判断文件打开是否正常
    {
        printf("文件打开失败,程序退出!\n");
        return 0;
    }
    //2.获取文件总大小,及把文件指针设置到文件开头
    fseek(pf,0,SEEK_END);//把文件指针放到文件末尾的位置
    size=ftell(pf);//得到文件大小,以字节为单位
    fseek(pf,0,SEEK_SET);//文件指针设置到文件开头
    //3.循环读取文件内容并显示进度
    srand((unsigned)time(NULL));//随机种子
    while(!feof(pf))//没有到文件结尾时都循环
    {
        len=fread(tmp,1,rand()%100,pf);//读取随机数量的内容,保存到tmp数组中
        tmp[len]='\0';//添加字符串的结束标记
        sum+=len;//累加总读取数  sum=sum+len
        strcat(cont,tmp);//将tmp数组中的内容附加到cont数组中
        //进度条
        current=sum/(size/progress);//计算当前的进度
        printf("\r");//让光标移动到行首
        for(i=0;i<progress;i++)
        {
            if(i<current)
                printf("");
            else
                printf("");
        }
        printf("[%6.2f%%]",(float)sum/size*100);
        Sleep(300);//间隔300毫秒读取一次
    }    
    fclose(pf);//关闭文件
    //printf("\n%s\n",cont);    
    return 0;
}