规定一个文件前10字节保存一个特定字符串,接下来4个字节保存文件大小,加入时12345这么大吧,我这么写,
  DS := TMemoryStream.Create;
  DS.Position := 0;
  DS.Write('JSGCSWB', length('JSGCSWB'));
  DS.Position := 10;
  DS.Write('12345', length('12345'));

不对吧,应该怎么写,以后再取前10个字节的内容时,是'JSGCSWB?'怎么避免乱码,取出来'JSGCSWB'

解决方案 »

  1.   

    var
      DS:TMemoryStream;
      size: Integer;
    begin
      DS := TMemoryStream.Create;
      DS.Position := 0;
      DS.Write('JSGCSWB', length('JSGCSWB'));
      size:=12345;
      DS.Write(size, sizeof(size));
      ds.SaveToFile('c:\12345.dat');
    end;
      

  2.   


    var
      DS:TMemoryStream;
      size: Integer;
      str : array [0..9] of Char;
    begin
      DS := TMemoryStream.Create;
      DS.Position := 0;
      //最好初始化一下,清零
      FillChar(str,Length(str),0);
      str := 'JSGCSWB';
      DS.Write(str, length(str));
      size:=12345;
      DS.Write(size, sizeof(size));
      DS.SaveToFile('c:\12345.dat');
      DS.Free;
    end;
      

  3.   

    这么做就是前7个字节是‘JSGCSWB’了吧,可是要求是0-9前十个字节是‘JSGCSWB’,10-13这四个字节保存12345,还有,我想知道size:=12345;
      DS.Write(size, sizeof(size));
    这样保存12345占了几个字节?不是5个吗?
      

  4.   

    你是我好友,一定给我解决啊
    这里的str声明成数组和声明成字符窜一样吗,如果按你这样做,取出来的前10个字节的内容还有乱码吗?
      

  5.   

    var
      DS:TMemoryStream;
      size: Integer;
      str :string;
      s: array[0..9]of char;
    begin
      DS := TMemoryStream.Create;
      DS.Position := 0;
      str := 'JSGCSWB';
      DS.WriteBuffer(str[1], 10); //写入
      size:=12345;
      DS.Write(size, sizeof(size));
      DS.SaveToFile('c:\12345.dat');  ds.Position:=0;
      ds.ReadBuffer(s,10); //读取
      showmessage(string(s));
      DS.Free;
    end;