2013-05-10 134 views
1

我已經寫了這段代碼,它將文本文件的內容讀入緩衝區,並通過套接字發送緩衝區直到文件結束。讀完文本文件的完整內容後fread()失敗

代碼工作正常,並且完成文件發送到套接字後,fread()失敗,但是,根據我的低調,當完整的文件通過套接字發送時,由於條件(while(fpSend!= NULL )),FREAD()不能甚至被稱爲:(

請看看代碼,不要讓我知道如果你看到任何錯誤:(

void sendingFile() 
{ 
    FILE *fpSend ; 
    if((fpSend = fopen("Client0.txt", "r+b")) == NULL) 
     { 
     MessageBox(NULL, 
        "Unable to open the File", 
        "Error!", 
        MB_ICONEXCLAMATION | 
        MB_OK); 
     exit(EXIT_FAILURE); 
     } 

    char file_buffer[2000]; 

    fseek(fpSend, 0, SEEK_END); 
    size_t file_size = ftell(fpSend); 
    fseek(fpSend, 0, SEEK_SET); 
    while(fpSend!=NULL) 
    { 
     int bytes_read=0; 
     if((bytes_read=fread(file_buffer, 1,12, fpSend))<=0) 
      { 
       char err[128], bread[128]; 
       itoa(errno,err,10); 
       itoa(bytes_read,bread,10); 
       MessageBox(NULL, 
          "Unable to copy file into buffer", 
          bread, 
          MB_ICONEXCLAMATION | 
          MB_OK); 
       exit(1); 
      } 
     /*MessageBox(NULL, 
        file_buffer, 
        "File copied in Buffer", 
        MB_ICONEXCLAMATION | 
        MB_OK);*/ 
     if(sendto(socketIdentifier, file_buffer, bytes_read, 0, (struct sockaddr *) &AH_glb_connectedSocket, sizeof(AH_glb_connectedSocket))<0) 
      { 
       MessageBox(NULL, 
          " NOT SENNT!", 
          "ERROR!", 
          MB_ICONEXCLAMATION | 
                MB_OK); 
            //exit(1); 
      } 
     else 
      { 
       //sent 
      } 
    } 
    MessageBox(NULL, 
     "File Sent Successfully!", 
     "SENT!", 
      MB_ICONEXCLAMATION | 
      MB_OK); 
    fclose(fpSend); 
} 

回答

1

文件句柄fpSend不在文件結束後變成NULL,你應該檢查feof(fpSend);

此外,使用ftell();來確定文件的大小隻有在文件大小小於2GB時纔有效,因爲它返回32位signed int(size_t)。

+0

你是對的:) – Ayse 2013-05-10 09:11:11