用C語言 系統IO實現檔案複製(帶進度條)

2021-10-25 18:41:54 字數 1839 閱讀 9092

#define size 50    //堆或者陣列buffer的大小

#define w_buf_size 100    //檔案複製過程中,設定寫入緩衝區位元組大小

int main(int argc, const char* ar**)

int fd_des=open(des_file, o_wronly|o_creat|o_trunc,0755);

if(fd_des!=-1)

else

/* //2.讀取原始檔內容,同時寫入目標檔案和顯示進度條,直到讀取完畢 */

char *buf=malloc(w_buf_size);

int n_read, n_write; //已讀取位元組數、已寫入位元組數

double persent;    //複製進度的百分比變數,小數形式

//將原始檔偏移量移動到末尾,lseek函式返回原始檔總位元組數

//定義成double型別,方便之後除法得到小數形式的百分比

double src_total_bytes=lseek(fd_src,0,seek_end);    

if(src_total_bytes!=-1)

else

lseek(fd_src,0,seek_set);    //修改偏移量至檔案開始位置

lseek(fd_des,0,seek_set);

printf("copying start...:\n");

while(1)

{bzero(buf,w_buf_size);    //清空buffer

n_read=read(fd_src,buf,w_buf_size);    //每次讀取size個位元組數

if(!n_read) break;    //如果讀取位元組數為0,說明讀取完畢

//將每次讀取的內容寫入標檔案,注意如果讀取到0('\0'),

//就不能使用strlen計算大小,直接使用n_read即可

n_write=write(fd_des,buf,n_read);

//計算進度百分比,小數形式

persent=lseek(fd_des, 0, seek_cur)/src_total_bytes;    

//列印本次讀取位元組數、寫入位元組數、小數形式進度百分比

printf(" get(%3d b), %3d bytes written! persent = %lf\n",

n_read,n_write,persent);

//重新整理展示百分比進度條,樣式:[#######]80%...|

int i;

const char* label="|/-\\";    //複製進度條最後面的字元旋轉動畫

static int index=0;    //label字串的下標,宣告為靜態變數,在while**塊作用域內,只能賦值一次了

int persent_counts=persent*100;    //將小數形式百分比轉換為整數形式,方便後面控制重新整理進度條長度

printf("[");

//當進度百分比(整數形式)前進10個點時,列印乙個#,覆蓋重新整理一次進度條。

for(i=0;i

C語言 檔案I O 實現檔案開啟建立複製關閉

include include int main else fseek stream,0,seek end 將檔案流位置設定到最後的偏移值 if size ftell stream 0 printf 檔案大小 d 位元組 n n size 建立乙個新檔案接收流資料 printf 請輸入當前目錄下要建...

用C 實現檔案I O操作

檔案 i o 在c 中比烤蛋糕簡單多了。在這篇文章裡,我會詳細解釋ascii和二進位制檔案的輸入輸出的每個細節,值得注意的是,所有這些都是用c 完成的。一 ascii 輸出 為了使用下面的方法,你必須包含標頭檔案 譯者注 在標準c 中,已經使用取代 fstream.h 所有的c 標準標頭檔案都是無字...

c語言 帶緩衝的檔案 I O操作

open操作 file fopen const char path,const char mode 作用 開啟乙個檔案流,開啟失敗則返回null file freopen const char path,const char mode,file stream 將乙個流進行重定向 file fdope...