我用了这两个控件,对一个文本文件进行编码和解码,可是编码再解码之后结果并不相同,不知道是不是我的用法不正确,请大家指点!procedure TForm1.Button14Click(Sender: TObject);
var
   buffer : string;
   filestream : tfilestream;
begin
     filestream := tfilestream.Create('E:\temp.dat',fmopenread);
     setLength(buffer,filestream.size);
     filestream.ReadBuffer(buffer[1],filestream.Size);
     filestream.Destroy;     buffer := base64encoder.CodeString(buffer);
     buffer := copy(buffer,3,length(buffer));
     buffer := IdBase64Decoder1.CodeString(buffer);     filestream := tfilestream.Create('E:\temp2.dat',fmcreate);
     filestream.WriteBuffer(buffer,length(buffer));
     filestream.Destroy;
end;其中的temp.dat文件内容全是字符串,大小10k多,编码再解码之后的temp2.dat却只有6k,好像被截断了,这是什么原因?

解决方案 »

  1.   

    delphi的控件不至于那么差吧,没人用过这两个控件吗,帮忙啊,up有分
      

  2.   

    setLength(buffer,filestream.size);
    filestream.ReadBuffer(buffer[1],filestream.Size);使用string类型的 buffer会不会有问题?
      

  3.   

    我也觉得可能是这个的问题,但是我试过,直接读进buffer中,再用filestream直接写入文件没问题的,就是去掉中间编码和解码的过程;
    或者不从文件中读取到buffer中,而直接把那个10k多大小的文本文件放到memo中,再赋给buffer:(如下)     buffer := Memo1.Lines.Text;
         buffer := base64encoder.CodeString(buffer);
         buffer := copy(buffer,3,length(buffer));
         buffer := IdBase64Decoder1.CodeString(buffer);     filestream := tfilestream.Create('E:\temp2.dat',fmcreate);
         filestream.WriteBuffer(buffer,length(buffer));
         filestream.Destroy;经过编码再解码后还是只有6K大小,郁闷!
      

  4.   

    这个控件有问题吧,如果连大小都不符就肯定不对!!!换一个吧。http://www.playicq.com上面就有
      

  5.   

    哦!搞错了!!!你的这一句完全错了!!!!setLength(buffer,filestream.size);
      

  6.   

    哦!对不起!我自己搞错了!!!你的这一句完全错了!!!!setLength(buffer,filestream.size); //Error!!!!!!!!!
      

  7.   

    to crossbow(La Vida Es Amor):
    那应该怎么写呀,先不管这句有没有错,
    我试过直接把一串字符串赋值给buffer,经过编码解码返回得值也不对!请继续关注
    现在去看推荐的网站
      

  8.   

    Base64加密的数据是要比原始数据要大的,因为他要用64个可见字符表示255个字符。我想怎么做你应该明白了吧???
      

  9.   

    噢,明白了,多谢crossbow(La Vida Es Amor) !稍后再给分,现在太忙了,请见谅 :)