各位大侠,帮忙看一下以下代码:begin
  MyStream:=TMemoryStream.Create();
  try
    //Load
    try
      myStream.LoadFromFile(FFileName);
    except
      result:=-1;
      Exit;
    end;    Size:=MyStream.Size;    GetMem(buffer,Size);
    try
      myStream.Position:=0;
      myStream.ReadBuffer(buffer^,size);
      Text:=StrPas(buffer);         //这一句转变,不过转变后的结果不是预期的结果      ......
      ......
    finally
      FreeMem(buffer);
    end;
   ......
   ......在上面的代码中,我希望将Buffer转变成Text(String类型),可是结果不是预期的结果。请指教!谢谢

解决方案 »

  1.   

    如果文件(FFilename)不是文本文件,就不能得到预期的结果。
      

  2.   

    我不知道你那里是怎么转的,你可以看看我的type
      TDXChatMessage = record
        dwType: DWORD;
        Len: Integer;
        C: array[0..0] of Char;
      end;procedure TCDMessengerClass.OnMessage(Sender: TObject; From: TDXPlayPlayer;
            Data: Pointer; DataSize: Integer);
    var
      s: string;
    begin
      // 获得聊天内容;
      case DXPlayMessageType(Data) of
        DXCHAT_MESSAGE:
          begin
            if TDXChatMessage(Data^).Len<=0 then
              s := ''
            else begin
              SetLength(s, TDXChatMessage(Data^).Len);                 ///<----这里
              StrLCopy(PChar(s), @TDXChatMessage(Data^).c, Length(s)); ///<----这里
            end;
            //Setxml(ExtractFilePath(Application.EXEName)+'myxml\talkdata.xml','talkForm','talkmanList',From.Name,S);
            writeHtml(ExtractFilePath(Application.EXEName)+'talking.html','<strong>'+From.Name+':</strong>'+S,'#FF0000','9');        //MessengerForm.WebBrowser1.Refresh;
            MessengerForm.WebBrowser1.Navigate(ExtractFilePath(Application.EXEName)+'talking.html');
            MessengerForm.WebBrowser1.OleObject.document.parentWindow.scrollTo(0, MaxInt);
          end;
      end;
    end;就可以把pChar转成String
      

  3.   

    看看以下代码:procedure TForm1.Button1Click(Sender: TObject);
    var
      fs:TFileStream;
      size:int64;
      buff:pchar;
      text:string;
    begin
      fs:=TFileStream.Create('c:\autoexec.bat',fmopenread or fmsharedenynone);  //autoexec.bat 则正确,command.com则不是预期的效果
      size:=fs.Size;
      getmem(buff,size);
      fs.Position:=0;
      fs.ReadBuffer(buff^,size);
      text:=strPas(buff);
      showMessage(text);
      freemem(buff);
      fs.Free;
    end;
      

  4.   

    你是不是要写文件流的程序?
    有问题请发信息到我的E-mail:[email protected]