C 读取文本文件的完整内容后,fread()失败
我已经编写了这段代码,它将文本文件的内容读入缓冲区,并通过套接字发送缓冲区,直到文件结束 代码工作正常,在通过套接字发送完整文件后,fread()失败,但是,根据我在通过套接字发送完整文件时的理解,由于条件(while(fpSend!=NULL)),甚至不能调用fread():( 请查看代码,如果发现任何错误,请务必告诉我:(C 读取文本文件的完整内容后,fread()失败,c,windows,winapi,text,text-files,C,Windows,Winapi,Text,Text Files,我已经编写了这段代码,它将文本文件的内容读入缓冲区,并通过套接字发送缓冲区,直到文件结束 代码工作正常,在通过套接字发送完整文件后,fread()失败,但是,根据我在通过套接字发送完整文件时的理解,由于条件(while(fpSend!=NULL)),甚至不能调用fread():( 请查看代码,如果发现任何错误,请务必告诉我:( void sendingFile() { 文件*fpSend; if((fpSend=fopen(“Client0.txt”,“r+b”))==NULL) { Messa
void sendingFile()
{
文件*fpSend;
if((fpSend=fopen(“Client0.txt”,“r+b”))==NULL)
{
MessageBox(空,
“无法打开文件”,
“错误!”,
MB|U图标连接|
MB_OK);
退出(退出失败);
}
字符文件缓冲区[2000];
fseek(fpSend,0,SEEK_END);
大小文件大小=ftell(fpSend);
fseek(fpSend,0,SEEK_SET);
while(fpSend!=NULL)
{
int bytes_read=0;
如果((bytes_read=fread(file_buffer,1,12,fpSend))文件句柄fpSend
在文件结束后没有变为NULL
。您应该选中feof(fpSend);
此外,使用ftell();
确定文件大小仅在文件大小小于2GB时有效,因为它返回32位带符号的int(size_t)。文件句柄fpSend
在文件结束后不会变为NULL
。您应该选中feof(fpSend);
此外,使用ftell();
确定文件大小仅在文件大小小于2GB时有效,因为它返回32位带符号整数(size_t)
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);
}