转移

2012-09-25 23 views
0

时打印的百分比这段代码是我公司开发的FTP客户端的部分:转移

for(size_to_receive = file_size; size_to_receive > 0;){ 
    nread = read(f_sockd, filebuffer, size_to_receive); 
    if(nread < 0){ 
     perror("read error on retr"); 
     close(fd); 
     return -1; 
    } 
    if(write(fd, filebuffer, nread) != nread){ 
     perror("write error on retr"); 
     close(fd); 
     return -1; 
    } 
    size_to_receive -= nread; 
    } 

我想实现下载的文件的百分比,但我有一些问题。我试图用这种方法:

for(size_to_receive = file_size; size_to_receive > 0;){ 
    nread = read(f_sockd, filebuffer, size_to_receive); 
    tx += nread; 
    printf("%d%%\n", (tx * 100/file_size)); 
    fflush(NULL); 
    if(nread < 0){ 
     perror("read error on retr"); 
     close(fd); 
     return -1; 
    } 
    if(write(fd, filebuffer, nread) != nread){ 
     perror("write error on retr"); 
     close(fd); 
     return -1; 
    } 
    size_to_receive -= nread; 
    } 

但传递开始时,因为我不喜欢它,“20%”立即打印,也因为如果我删除了\n20%%\n - 40%%\n等,这些值将在传输结束时打印,而不是立即打印。

我该如何开发更好的代码?

+0

的可能重复的[显示进度指示器(http://stackoverflow.com/questions/6591264/show-progress-indicator) – moooeeeep

回答

4
for (size_to_receive = file_size; size_to_receive > 0;) { 
    nread = read(f_sockd, filebuffer, size_to_receive); 
    tmp_xc += nread; 

    printf("%d%%\r", (tmp_xc * 100/file_size)); 
    fflush(NULL); 
} 
+0

远更好的解决方案。虽然你可以很容易地修改它,只显示20%的增量:) – Goz

+0

更好的是,你可以在最后使用'\ r'来更新一个更好的用户界面。 – nneonneo

+0

非常感谢,这非常好:D – polslinux