void do_write(int s,char *buf,int len)
{
int retcount;
do{
retcount = write(s,buf,len);
buf += retcount;
len -= retcount;
}while(len > 0);
}
void transmit()
{
int fd;
int sd = file_info.sd;
int read_count,read_sum = 0;
char *buf = (char*)malloc(102500);
fd = file_info.fd = open(file_info.path,O_WRONLY | O_CREAT | O_TRUNC,0666);
if(fd < 0){
printf("local file open error\n");
exit(1);
}
while(read_sum < file_info.size){//file_info.size為下載檔案的大小
read_count = read(sd,buf,102400);
do_write(fd,buf,read_count);
read_sum += read_count;
}
printf("read_sum:%d\n",read_sum);
printf("file size:%d\n",file_info.size);
free(buf);
}
以上代碼用于下載檔案,while回圈中從網路讀入資料,然后寫入本地。測驗發現讀取的資料始終比檔案本來的大小多幾個位元組(也就是read_sum大于file_info.size),因此下載的檔案無法使用,請問我哪里寫錯了
uj5u.com熱心網友回復:
file_info.size 是如何得到的,怎么知道檔案大小uj5u.com熱心網友回復:
推薦使用WinHex軟體查看硬碟或檔案或記憶體中的原始位元組內容。不要把
fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //讀時把\r\n替換成\n,寫時把\n替換成\r\n;讀到\x1a就設定EOF;讀寫的內容當字符看待
和
fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替換,遇到\x1a仍繼續讀;讀寫的內容當位元組看待
弄混了
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/122965.html
標籤:網絡編程
下一篇:共同討論:MFC源代碼中_afxThreadData的AllocSlot()函式在分配一個槽時可能會覆寫一個已使用的槽
