#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...