由于需要,我学要在一个文本文件中,写入字符串和二进制数据(照片),但是文本文件不能使用BlockWrite,Write又不能写Byte数组,不知道要怎么办??
请大家帮忙啊。
我先把照片文件存到Byte数组里了,文件明是随机生成的,不能二次获取。
文件前面放文本字符串,420字节,后面放二进制照片信息。还有,我用动态数组的时候老出现内存错误(图片很小),不知道为什么?
var PicFile:File;
PicByte:array of byte;
....
setLength(PicByte,FileSize(PicFile));
BlockRead(PicFile,PicByte,1,Num1);
....语句都通过,也没有什么明确的错误提示,就出现内存访问错误。
请大家帮忙啊。
我先把照片文件存到Byte数组里了,文件明是随机生成的,不能二次获取。
文件前面放文本字符串,420字节,后面放二进制照片信息。还有,我用动态数组的时候老出现内存错误(图片很小),不知道为什么?
var PicFile:File;
PicByte:array of byte;
....
setLength(PicByte,FileSize(PicFile));
BlockRead(PicFile,PicByte,1,Num1);
....语句都通过,也没有什么明确的错误提示,就出现内存访问错误。
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1); { Record size = 1 }
if SaveDialog1.Execute then { Display Save dialog box}
begin
AssignFile(ToF, SaveDialog1.FileName); { Open output file } Rewrite(ToF, 1); { Record size = 1 }
Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
+ ' bytes...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;
end;
end;
var
p: PByte;
begin
FillChar(p, intLength, #0);
p := PByte(intValue);
stream.writeBuffer(p, intLength);
end;procedure WriteString(stream: TMemoryStream; strValue: String; intSizeLength: Integer);
var
i: Integer;
p: PChar;
intSize: Integer;
begin
intSize := Length(strValue);
WriteInteger(stream, intSize, intSizeLength); for i := 1 to Length(strValue) do
begin
p := PChar(strValue[i]);
stream.WriteBuffer(p, 1);
end;
end;procedure WriteBitmap(stream: TMemoryStream; bmpValue: TBitmap; intSizeLength: Integer);
var
streamTemp: TMemoryStream;
intSize: Integer;
p: PChar;
i: Integer;
begin
streamTemp := TMemoryStream.Create;
bmpValue.SaveToStream(streamTemp); intSize := streamTemp.Size;
WriteInteger(stream, intSize, intSizeLength); p := streamTemp.Memory;
i := 0;
while i < streamTemp.Size do
begin
stream.WriteBuffer((p + i)^, 1);
i := i + 1;
end;
end;
汗一个,如何把double行保存到二进制文件中,然后再读出,当然使用8Bytes。