如何把 文件二进制数据赋给一个string??? ( 积分: 25 )

  • 主题发起人 主题发起人 mazheng
  • 开始时间 开始时间
M

mazheng

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.btn1Click(Sender: TObject);
var iFileHandle,kbStart,kbEnd,kbSize:integer;
Mp3Name,text: string;
Buffer: PChar;
begin
Mp3Name:='123.mp3';
iFileHandle := FileOpen(Mp3Name, fmOpenRead);
kbSize:=FileSeek(iFileHandle,0,2);
Buffer := PChar(AllocMem(kbSize + 1));
FileRead(iFileHandle, Buffer^, kbSize+1);
FileClose(iFileHandle);

text := ???

end;
 
SetLength(Text, kbSize);
CopyMemory(@Text[1], @Buffer[0], kbSize);
 
text := VarToStr(FileRead(iFileHandle, Buffer^, kbSize+1));
 
procedure TForm_mian.Button1Click(Sender: TObject);
var
ss:Tstringstream;
ms:TmemoryStream;
st:string;
begin
ss:=Tstringstream.Create('');
ms:=TmemoryStream.Create;
try
ms.LoadFromFile('123.mp3');
ms.SaveToStream(ss);
st:= ss.DataString
//整个赋值这样
ss.Position:=2
//设置起始位
st:=ss.ReadString(77777);//读取数量
finally
ss.Free;
ms.Free;
end;
end;
 
汗.......楼主的代码好像有问题吧
你用FileSeek(iFileHandle,0,2);定位到文件末尾了
然后用PChar(AllocMem(kbSize + 1));开辟了文件大小的内存,估计你想复制这段文件数据
然后你直接FileRead(iFileHandle, Buffer^, kbSize+1);这样你什么都读不出来啊
因为指针在文件末尾呢
你要先FileSeek(iFileHandle,0,0);定位到文件首才行

如果你只是要显示这段文件,简单点用这个:
var
fs:tfilestream;
ss:tstringstream;
mp3name,text:string;
begin
fs:=tfilestream.Create(Mp3Name, fmOpenRead);
ss:=tstringstream.Create('');
try
fs.Position:=0;
ss.CopyFrom(fs,fs.Size);
text:=ss.DataString
{或者直接用ss.DataString}
finally
fs.Free;
ss.Free;
end;
 
后退
顶部