HTTP下载保存文件问题!!!!!!!!!

huimouse 2007-03-31 09:52:13
在S60上开发一个Http下载的程序,接收到文件后使用流存储到文件,代码如下:
iStream->WriteL(aBodyData);
iStream->CommitL();
其中iStream为RFileWriteStream对象,aBodyData为接收到的内容!
使用这种方法导致整个程序在保存文件的时候非常慢,处于长时间等待状态,不能进行其它的操作,请问各位大侠有何好的解决方案!
...全文
644 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcdefg007 2008-09-22
  • 打赏
  • 举报
回复
mark
gaogao1041 2008-09-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 Atoric 的回复:]
引用 16 楼 Atoric 的回复:
建议:在论坛搜一下“Http”,会有你想要的资料的。

下面这个帖子对将数据写入数据到文件挺有用的:
http://topic.csdn.net/u/20071211/21/ea4b6881-4da4-4c49-adde-7420f59ed453.html


建议:在论坛搜一下“Http”,会有你想要的资料的。

下面这个帖子对将数据写入到文件挺有用的:
http://topic.csdn.net/u/20071211/21/ea4b6881-4da4-4c49-adde-7420f59ed453.html
[/Quote]


建议:在论坛搜一下“Http”,会有你想要的资料的。

下面这个帖子对将数据写入到文件挺有用的:
http://topic.csdn.net/u/20071211/21/ea4b6881-4da4-4c49-adde-7420f59ed453.html
Atoric 2008-03-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Atoric 的回复:]
建议:在论坛搜一下“Http”,会有你想要的资料的。

下面这个帖子对将数据写入数据到文件挺有用的:
http://topic.csdn.net/u/20071211/21/ea4b6881-4da4-4c49-adde-7420f59ed453.html
[/Quote]

建议:在论坛搜一下“Http”,会有你想要的资料的。

下面这个帖子对将数据写入到文件挺有用的:
http://topic.csdn.net/u/20071211/21/ea4b6881-4da4-4c49-adde-7420f59ed453.html
Atoric 2008-03-31
  • 打赏
  • 举报
回复
建议:在论坛搜一下“Http”,会有你想要的资料的。

下面这个帖子对将数据写入数据到文件挺有用的:
http://topic.csdn.net/u/20071211/21/ea4b6881-4da4-4c49-adde-7420f59ed453.html
Paip_Ceser 2008-03-30
  • 打赏
  • 举报
回复
这个我做过一点,贴一段代码:
case THTTPEvent::EGotResponseHeaders:
{
RHTTPResponse resp = aTransaction.Response();

TInt statusCode = resp.StatusCode();
if(statusCode == 200)
{

User::LeaveIfError(iFs.Connect());
if (BaflUtils::FileExists( iEikEnv->FsSession(),iFileName) )
iFile.Replace(iFs,iFileName,EFileWrite);
else
iFile.Create(iFs,iFileName,EFileWrite);
}
else
{
}
}
break;
case THTTPEvent::EGotResponseBodyData:
{
MHTTPDataSupplier* body = aTransaction.Response().Body();
TPtrC8 ptr;
iIsLast = body->GetNextDataPart(ptr);

TInt index = 0;
iFile.Seek(ESeekEnd,index);
iFile.Write(index,ptr);

if(iIsLast)
{
iFile.Close();
iFs.Close();

}
}
suyouxin 2008-03-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 suyouxin 的回复:]
用异步模式,不然write会阻塞进程

同步模式总是等待http一个会话结束再返回
[/Quote]

汗,看错了,还以为是HTTP的类,原来就是写文件啊,应该没必要异步,文件操作相对比较快,可能是别的地方阻塞进程了
yanro 2008-03-01
  • 打赏
  • 举报
回复
RFs rfs;
RFile rfile;

User::LeaveIfError (rfs.Connect ( ) );
ConeUtils::EnsurePathExistsL ( filepath );

TInt err = rfile.Open (rfs, filepath, EFileRead|EFileWrite );
if (err != KErrNone )
{
TRAPD(err,BaflUtils::EnsurePathExistsL(rfs,filepath))
;
User::LeaveIfError (rfile.Create (rfs, filepath, EFileWrite ) );
}


TInt bytes;
rfile.Size (bytes );


TInt len = aBodyData.Length ( );

if ( len <= 0 )
return;

HBufC8 *temp = aBodyData.Alloc ( );

rfile.Write (bytes, (TDes8 &)temp->Des() );


rfile.Close ( );
rfs.Close ( );
//HTTP下载文件分段来接收,保存文件也必须下载多少保存多少,没次打开时先判断文件存在不存在.不存在先创建,存在则写到文件的后面.(还可以实现断点续传)!
caitian6 2008-01-22
  • 打赏
  • 举报
回复
mark
Eddy_0825 2008-01-21
  • 打赏
  • 举报
回复
这个程序我实现过,用http上传下载都很正常。
速度很快。
肯定是write函数用的不对。
dyw 2008-01-12
  • 打赏
  • 举报
回复
异步模式?从实际使用来看没有必要,网络操作比文件写入慢许多。也从未碰到数据丢失的情况。

为何“同步模式总是等待http一个会话结束再返回”?只文件写入而已,当收到body信息时写入文件即可。
erener 2008-01-12
  • 打赏
  • 举报
回复
dyw
道不同不相为谋
等 级:
发表于:2008-01-11 22:08:467楼 得分:0
楼上说的“可能会死”是正确的,这是软件的共性,与后面的原因不相干吧。

此外,多线程计划怎么用?难道会替代读写文件?


==============================
我这里的“可能会死”指机器很慢,处于长时间等待状态,不能进行其它的操作

这个我也遇到过, 比如我下载一个大概有1M多的文件, 那么就会有几百次的内存操作,

但是这个时候我还都没有写入文件中, 还是“处于长时间等待状态,不能进行其它的操作”

具体原因我也不理解,难道这里变成同步的了?所以我想如果采用另外一个服务进程帮我处理网络数据,是不是可以避免。

具体没有实施,没那么多时间,“不能进行其它的操作”那就让用户等吧
suyouxin 2008-01-12
  • 打赏
  • 举报
回复
用异步模式,不然write会阻塞进程

同步模式总是等待http一个会话结束再返回
dyw 2008-01-11
  • 打赏
  • 举报
回复
在收到header时打开流,body时一直写入,直到最后body关闭流。
caitian6 2008-01-11
  • 打赏
  • 举报
回复
mark
dyw 2008-01-11
  • 打赏
  • 举报
回复
楼上说的“可能会死”是正确的,这是软件的共性,与后面的原因不相干吧。

此外,多线程计划怎么用?难道会替代读写文件?
erener 2008-01-11
  • 打赏
  • 举报
回复
可能会死
因为一直接收数据 一直写

用多线程吧
hanxiao_0210 2008-01-09
  • 打赏
  • 举报
回复
mark
格利高里 2007-04-12
  • 打赏
  • 举报
回复
手机上http接收的时候,每次recv一般都是1-2k左右,一边接收,一般保存,感觉不到延迟阿
Beover1984 2007-04-12
  • 打赏
  • 举报
回复
可以考虑使用RFile::Write()的异步方法并通过活动对象来实现.
void Write(const TDesC8& aDes,TRequestStatus& aStatus);

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧