由于需要,我学要在一个文本文件中,写入字符串和二进制数据(照片),但是文本文件不能使用BlockWrite,Write又不能写Byte数组,不知道要怎么办??
请大家帮忙啊。
我先把照片文件存到Byte数组里了,文件明是随机生成的,不能二次获取。
文件前面放文本字符串,420字节,后面放二进制照片信息。还有,我用动态数组的时候老出现内存错误(图片很小),不知道为什么?
var PicFile:File;
PicByte:array of byte;
....
setLength(PicByte,FileSize(PicFile));
BlockRead(PicFile,PicByte,1,Num1);
....语句都通过,也没有什么明确的错误提示,就出现内存访问错误。

解决方案 »

  1.   

    var  FromF, ToF: file;
      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;
      

  2.   

    TO  outer2000(天外流星) :您这个是文件拷贝吧!不知道怎么把字符串和二进制文件混一起写呢??
      

  3.   

    WriteString(stream, strDescribe, 2);WriteBitmap(stream, self.bmpGDBitmap, 4);procedure WriteInteger(stream: TMemoryStream; intValue: Integer; intLength: Integer);
    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;
      

  4.   

    第一两行是用法。抛个砖头了。
    汗一个,如何把double行保存到二进制文件中,然后再读出,当然使用8Bytes。