線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2505
推到 Plurk!
推到 Facebook!

关于用FileWrite与MemoryStream保存数据的问题

答題得分者是:malanlk
lonmener
一般會員


發表:16
回覆:32
積分:9
註冊:2005-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-06 16:57:10 IP:60.212.xxx.xxx 未訂閱
上次发的贴子可能因为代码太长一天都没有人回复,所以把问题分开; 在不改变文件大小的情况下改写文件数据,我试着用FileWrite来写可以实现,但问题又来了,怎么样才能和IdHTTP关联起来?我想用MemoryStream来关联起来,但不知为什么写入的数据一直不正确,请帮忙指正,代码如下: procedure TForm1.Button1Click(Sender: TObject); var Mydown:TIdHTTP; Ms:TMemoryStream; aH,abuf:THandle; //FileOpen句柄 aURL:string; //网址 aSize:int64; //远程文件大小 begin aURL:='http://210.51.190.26:8000/1.rar'; //下载网址 Mydown:=TIdHTTP.Create(nil); Ms:=TMemoryStream.Create; Mydown.Head(aURL); aSize:=Mydown.Response.ContentLength; //取得文件大小 Mydown.Response.ContentRangeStart:=0; //从远程文件0位置开始 Mydown.Response.ContentRangeEnd:=aSize; //到远程文件尾结束 aH:=FileOpen('1.rar',fmOpenWrite or fmShareDenyNone); //打开已存在的1.rar文件 try abuf:=Mydown.Get(aURL,Ms); FileWrite(aH,abuf,aSize); //将下载文件内容写入文件(问题应该就在这里) finally Mydown.Free; //释放IDHTTP Ms.Free; //释放MEMORYSTREAM FileClose(aH) //释放FILEOPEN end; end; 發表人 - lonmener 於 2005/09/06 17:11:44
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-07 01:04:40 IP:61.219.xxx.xxx 未訂閱
  //Ms:TMemoryStream;
  //aH,abuf:THandle;
  fs: TFileStream;
  ...
  Mydown:=TIdHTTP.Create(nil);
  //Ms:=TMemoryStream.Create;      fs := TFileStream.Create('1.rar',fmOpenWrite or fmShareDenyNone);
  //aH:=FileOpen('1.rar',fmOpenWrite or fmShareDenyNone);      try
    Mydown.Get(aURL,fs);
    //FileWrite(aH,abuf,aSize);
  finally
    Mydown.Free;
    fs.Free;
    //Ms.Free;
    //FileClose(aH);
  end;
Mydown.Get(aURL) 傳回的是 String 不是 Handle.... 如上改法試試看...
lonmener
一般會員


發表:16
回覆:32
積分:9
註冊:2005-08-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-07 08:22:34 IP:218.59.xxx.xxx 未訂閱
这个用过,能正常保存数据, 但是有一个问题:想在不改变原文件大小的情况下改写数据 我在下载前,先在磁盘上创建了一个与远程文件大小相同、内容为空的文件, 我想把下载远程文件的一部分,然后把下载的这部分保存在下载前创建的文件中,但不改变原文件的大小,如果用filestream的话,只下载一部分会改变原创建文件的大小;是否有办法解决? 同时谢谢malanlk老哥一直对我的帮助!!!!!!!!!!!!
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-07 08:39:57 IP:203.69.xxx.xxx 未訂閱
FileStream 也是可以用 Seek 來移動檔案指標啊... Create 的時候用 fmOpenReadWrite Create 後 Seek 到適當指標 Free 前將指標移到尾端.... 這樣試試吧...
lonmener
一般會員


發表:16
回覆:32
積分:9
註冊:2005-08-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-07 09:45:06 IP:218.59.xxx.xxx 未訂閱
谢谢老大,成功! 不过我用的是filestream.size 一会我再试一下seek
系統時間:2024-05-10 5:31:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!