轉移

2012-09-25 18 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