用assignfile和read可以把一个二进制文件读取到一个byte数组,但处理函数需要提供一个pchar,该如何转化?或者如何直接读到一个pchar类型的变量中。
t:array of byte;
p:pchar;
如果用p:=@t;的话,得到的p只有一个字节。如何对p来setlength?
t:array of byte;
p:pchar;
如果用p:=@t;的话,得到的p只有一个字节。如何对p来setlength?
解决方案 »
- delphi 如何连接远程的sql2000数据库
- ++++回家结婚去喽,等我回来++++
- 高分求救!!!!!!!!!!关于Midas三层数据库问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- dbgrid的下拉列表问题!!!
- 谁能告诉我CommaText是身摸意思
- 请解释一下ADOQuery.next和ADOQuery.RecordSet.MoveNext的差别
- 如何在程序中调用winamp插件dsp_DeFX.dll
- 寻求帮助文档
- 怎样去改变Coolbar的长度!??
- 已知一个句柄,如何判断它是不是Twebbrowser类?感谢!
- 请问大侠何处有delphi的电子书下载
- 请问如果使ShellListView中双击文件时,不打开文件,而是运行我的代码?
FreeMem(P)
用Stream的LoadFromFile读取文件。
p: PChar;
begin
// 创建指针
p := StrAlloc(BufferSize);
try
// 拷贝数据到 PChar 中
Move(p^, PByte(Buffer)^, BufferSize); // 调用你的函数, 把 p 传入
// ... ...
finally
// 释放指针
StrDispose(p);
end;
end;
t:array[0..1023] of byte
但如果是动态数组就不行,
t:array of byte
setlength(t,1024);
得到的p,处理结果不一样,但读取文件肯定是事先不知道大小的,请问在做这样的操作时需注意什么?
我知道这个函数,就是如果t是动态数组的时候,setlength(t,filesize(f))之后得到的p和事先知道文件大小,直接定义数组的大小得到的p不一样,处理结果也不一样。to:dongh(董宏)
我知道p是指针,但如何才能用这个p表示一个二进制文件的内容(里面当然可能有很多0),我是先将文件当作字符数组处理(即读到t中),然后需要调用处理函数(需要提供pChar类型变量),函数中当然有长度作为一个参数,可处理结果我想象的不一样(比如作文件复制工作)。我读文件是用下面的方法
var
f:file of byte;
b:byte;
t:array of byte;
i:integer;
while not eof(f) do
begin
read(f,b);
t[i]:=b;
inc(i)
end;
这样一个字节一个字节好不好,是不是太慢了,有什么好办法?
fs := TFileStream.Create('f:\123.jpg',fmOpenRead or fmShareDenyNone);
得到的fs.size等于0,为什么??文件应该已经读出来了,紧接着
try
GetMem(tmp,fs.size);
fs.ReadBuffer(tmp^,fs.Size);
ShowMessage(InttoStr(length(Tmp)));
FreeMem(tmp);
finally
fs.Free;
end;
showmessage输出4,虽然不对(估计是有0被当作字符串终止符),但不是0,文件的真正大小是113595字节。到底应该怎样利用TFileStream操作文件到PChar??望指教。
GetMem(tmp,fs.size);
fs.ReadBuffer(tmp^,fs.Size);
ShowMessage(InttoStr(length(Tmp)));//实际数据已经过来了,你这样看不出来的,
finally
FreeMem(tmp);
fs.Free;
end;
调用处理函数时参数是指针和长度,用tmp和fs.size?