HANDLE filehandle=CreateFile("XXXXXXX",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(filehandle==INVALID_HANDLE_VALUE)
return 0;
DWORD filesize=GetFileSize(filehandle,NULL);
DWORD readsize=0;
buff=new char[4096+1];
while(TRUE)
{
SetFilePointer(filehandle,readsize,NULL,FILE_CURRENT);
if(!ReadFile(filehandle,buff,4096,&readsize,NULL))
return 0;
send(file_socket,buff,readsize,0);
if(readsize<4096)
break;
}
delete buff;
CloseHandle(filehandle);
closesocket(file_socket);代码运行很正常 并且 传送文本文件没问题
但是传送2进制 文件就有问题了。
高手指点一下。。
。
高手帮忙看看 100
if(filehandle==INVALID_HANDLE_VALUE)
return 0;
DWORD filesize=GetFileSize(filehandle,NULL);
DWORD readsize=0;
buff=new char[4096+1];
while(TRUE)
{
SetFilePointer(filehandle,readsize,NULL,FILE_CURRENT);
if(!ReadFile(filehandle,buff,4096,&readsize,NULL))
return 0;
send(file_socket,buff,readsize,0);
if(readsize<4096)
break;
}
delete buff;
CloseHandle(filehandle);
closesocket(file_socket);代码运行很正常 并且 传送文本文件没问题
但是传送2进制 文件就有问题了。
高手指点一下。。
。
高手帮忙看看 100
我要问的主要是 setfilepointer 和 readFile 2个函数啊
我想达到的目的是 每次读取 4KB 然后 移动 读取指针。。
如果读的 字节小于4kb那就证明 文件读完了。上面的代码对吗
楼主的程序有内存泄露!
HANDLE filehandle=CreateFile("XXXXXXX",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(filehandle==INVALID_HANDLE_VALUE)
return 0;
DWORD filesize=GetFileSize(filehandle,NULL);
DWORD readsize=0;
buff=new char[4096+1];
while(TRUE)
{
SetFilePointer(filehandle,readsize,NULL,FILE_CURRENT);
if(!ReadFile(filehandle,buff,4096,&readsize,NULL)) // 当这里成立的时候,直接返回,不会释放内存
return 0;
send(file_socket,buff,readsize,0);
if(readsize <4096)
break;
}
delete buff;
CloseHandle(filehandle);
closesocket(file_socket);
if(filehandle==INVALID_HANDLE_VALUE)
{
return 0;
}
DWORD filesize=GetFileSize(filehandle,NULL);
DWORD readsize=0;
buff=new char[4096+1];
while(ReadFile(filehandle,buff,4096,&readsize,NULL)) //直接循环读取,指针自动会一次后移
{
if(readsize > 0)
{
send(file_socket,buff,readsize,0);//先发送
}
if(readsize != 4096) //然后判断是否已经到了文件的末尾了
{
break;
}
}
delete buff;
CloseHandle(filehandle);
closesocket(file_socket);