社区
网络编程
帖子详情
文件的分段传输
passenger728
2008-06-01 12:22:21
我做了一个关于文件传输的程序,但是只能传送几十兆以内的小型文件,我想通过文件分段传输实现大型文件的传输,希望大家帮帮忙!先谢了。
...全文
457
15
打赏
收藏
文件的分段传输
我做了一个关于文件传输的程序,但是只能传送几十兆以内的小型文件,我想通过文件分段传输实现大型文件的传输,希望大家帮帮忙!先谢了。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
clakcenter
2011-11-03
打赏
举报
回复
能把你这段分块传输的代码贴出来吗?我现在就是遇到这个问题了请指教
passenger728
2008-06-10
打赏
举报
回复
问题自己解决了,还是感谢各位的指点。
na_he
2008-06-04
打赏
举报
回复
看看思路了,呵呵!
NGCMDHEADER header;
status stsCode = statusOk;
FILE* fp = NULL;
// Open file
fp = fopen(strFileName.c_str(), "rb");
if (fp == NULL)
{
return statusCreateFileError;
}
//
char szDataBuf[MAX_DATABUF_LEN];
size_t dwItem = 0;
//
header.dwCmd = CMD_FDDATA;
// Send file data
while (true)
{
dwItem = fread(szDataBuf, sizeof(char), MAX_DATABUF_LEN, fp);
header.dwBufLen = dwItem;
stsCode = socket.SendExact((char*)&header, sizeof(header));
if (stsCode != statusOk)
{
break;
}
stsCode = socket.SendExact(szDataBuf, dwItem);
if (stsCode != statusOk)
{
break;
}
if (dwItem < MAX_DATABUF_LEN)
{
header.dwCmd = CMD_FDEND;
header.dwBufLen = 0;
stsCode = socket.SendExact((char*)&header, sizeof(header));
LogFileTransferInfo(LOG_FILE, strFileName, ts.nCurFileTransferedSize);
break;
}
// update information
ts.nCurFileTransferedSize += header.dwBufLen;
SendMessage(GetMsgProcHwnd(), WM_TASK_STATUS_UPDATE, STATUS_UPDATE_FILE, (LPARAM)&ts);
}
// Close file & socket
fclose(fp);
char Ext[6];
char szFileName[MAX_PATH];
strcpy(szFileName,strFileName.c_str());
_GetFileExtName(szFileName,Ext);
if( strcmp(Ext,".NSOFT") ==0 )
{
::DeleteFile(szFileName);
}
return stsCode;
}
rageliu
2008-06-04
打赏
举报
回复
file.open(filename,ios::binary); 确定路径正确,除了2进制,带必要的读写参数
9527他大爷
2008-06-03
打赏
举报
回复
一小块一小块从文件读,再发送出去再读
逃逃VS海
2008-06-03
打赏
举报
回复
up 学习用
passenger728
2008-06-03
打赏
举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
我在做文件操作时一般都是用API的,不过CFile应该也没问题,你是open的时候返回false吗?
[/Quote]
文件open的时候没有返回false,只是卡住不动了。
passenger728
2008-06-03
打赏
举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
我在做文件操作时一般都是用API的,不过CFile应该也没问题,你是open的时候返回false吗?
[/Quote]
打开的时候没有显示失败,只是卡住不动了。
僵哥
2008-06-02
打赏
举报
回复
为什么不用API?
cnzdgs
2008-06-02
打赏
举报
回复
我在做文件操作时一般都是用API的,不过CFile应该也没问题,你是open的时候返回false吗?
僵哥
2008-06-02
打赏
举报
回复
API可以查MSDN
CreateFile打开文件
SetFilePointer(相当于seekoff)
ReadFile读文件
CloseHandle关闭文件句柄。
passenger728
2008-06-02
打赏
举报
回复
[Quote=引用 4 楼 unsigned 的回复:]
为什么不用API?
[/Quote]
你能帮我改一改吗,或用API帮我写一个,谢谢 。
僵哥
2008-06-01
打赏
举报
回复
找出“只能传送几十兆以内”的原因。
分包,其实就是一次从文件当中读一块(由于网络的速度是有限的,所以没有任何必要把整个文件几十几百兆一次性读入内存,这个内存消耗是非必要的),然后发送,再读一块。一般只要保留文件的句柄就不需要作任何动作,直接readfile就可以(读文件的时候也不可能是你想读多少就一定能给你读取出来的,而是通过返回值告诉你读取了多少,此时你可能需要继续读取,而你也可以先把读完的发送了,再继续读取。
另外文件也可以通过seek或者SetFilePointer设置文件指针,于是你就可以在任意时间里进行选择性地发送某一段或某几段。
passenger728
2008-06-01
打赏
举报
回复
我对文件分段了,代码如下,在程序运行的时候只能打开4096k以下的文件(我把文件分成4096一块)。
length=strlen(sFname); //获取文件名长度
//发送文件名长度
sendmessage(csock,(const char*)&length,sizeof(int));
//发送文件名
sendmessage(csock,sFname,length);
file.open(filename,ios::binary); //用二进制打开文件
if(file.fail())
{
MessageBox("文件打开失败!");
goto EXIT;
}
fb=file.rdbuf();
length=fb->seekoff(0,ios::end,ios::in)-fb->seekoff(0,ios::beg,ios::in);
fb->seekoff(0,ios::beg,ios::in); //获取文件长度
//发送文件大小
sendmessage(csock,(const char*)&length,sizeof(int));
bRet=TRUE;
char data[4097];
while(length>0)
{
int len=0;
if(length <= 4096)
{
len = length;
}
else
{
len = 4096;
}
//准备缓冲区
// data=new char[len];
file.read(data,len);
// data[length] = '\0';
//发送整个文件
bRet=sendmessage(csock, data, len);
length -= len;
// delete[] data;
}
file.close();
if(bRet){
// MessageBox("发送成功!");
}
else{
MessageBox("发送失败!");
}
希望大家不吝指教。谢谢!
cnzdgs
2008-06-01
打赏
举报
回复
简单点的方式,用TCP协议建立连接,打开文件,做一个循环,每次读一小段数据,发送出去,再循环。
大
文件
分段
传输
与存储技术实现方案-
分段
传输
大
文件
处理存储优化数据分块断点续传并发处理
文件
校验分布式存储网络
传输
优化负载均衡-用于解决大
文件
上传下载过程中的网络不稳.zip
为了解决这个问题,研发了一种大
文件
分段
传输
与存储技术。这种技术的核心思想在于将大
文件
分切成多个小段,每个小段独立进行
传输
和存储,这样即使在网络状况不佳的情况下,也只是影响到单个或少数几个小段,而不会...
android大
文件
分段
上传
在标题"android大
文件
分段
上传"中提到的方法,是通过使用Socket流将大
文件
分段
进行上传,这是一种有效应对大
文件
传输
问题的策略。下面我们将详细探讨这一技术。 首先,了解Socket的基本概念。Socket是网络编程中的...
C#socket 大
文件
传输
分段
传输
C#DEMO
C#socket 大
文件
传输
分段
传输
C#DEMO
前端
分段
传输
大
文件
组件,基于HTML5 File API、Blob,后端采用node接收
文件
.zip
前端实现大
文件
分段
上传的基本流程如下: 1. 用户选择大
文件
。 2. 使用File API将大
文件
切分为多个Blob段。 3. 对每个Blob段创建一个FormData对象,并附加到POST请求中。 4. 使用XMLHttpRequest或fetch API异步发送...
WCF 实现
文件
分段
上传、支持多个
文件
一起处理、Log4Net日志记录
为了提高效率和可靠性,
文件
通常被
分段
传输
,尤其是在大
文件
的情况下。
分段
上传可以避免一次性加载整个
文件
到内存中,减少内存压力,同时允许在网络不稳定时恢复已
传输
的部分。 2. **
文件
分段
上传**:
文件
分段
...
网络编程
18,358
社区成员
64,186
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章