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

在OSX 使用 TFileStream寫入檔案的一部份

答題得分者是:pcplayer99
blue
中階會員


發表:169
回覆:136
積分:81
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-03-12 17:25:22 IP:122.146.xxx.xxx 訂閱
Hi,各位先進大家好:
小弟需要將資料的一部份寫入檔案的特定位置(用途:分段下載後寫檔)
如下程式,在Windows是可正常的,
但,在 OSX 中卻是在 fs.WriteBuffer(ms.Memory, ms.Size); 出現 Stream write error
請問,是否有先進通到相同問題?
謝謝!

unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
FFileName: String;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
var
fs: TFileStream;
begin
//創建資料檔案,用0填充
fs := TFileStream.Create(FFileName, fmCreate);
try
fs.Size := 1024000;
finally
fs.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ms: TMemoryStream;
fs: TFileStream;
begin
ms := TMemoryStream.Create;
ms.SetSize(1024);
fs := TFileStream.Create(FFileName, fmOpenReadWrite or fmShareDenyNone);
fs.Seek(20480, soFromBeginning);
fs.WriteBuffer(ms.Memory, ms.Size);
fs.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FFileName := './abc.txt';
end;
end.

pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-03-13 10:15:27 IP:120.236.xxx.xxx 訂閱
【fs.WriteBuffer(ms.Memory, ms.Size);】


这一句,在 WINDOWS 底下也会出错。

应该是:

fs.WriteBuffer(ms.Memory^, ms.Size);


注意, Ms.Memory 是一个 Pointer,应该在后面加上 ^ 才表示是这个 Pointer 里面的内容。
系統時間:2024-04-23 16:26:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!