我在用TStringList处理文件时遇到了问题:
我先把一个String经过加密写入到文件中,然后再用TStringList读出,解密,却出现了错误:本来一个string被读出时成了两个string,解密出来的也不是原来的字符串了:(
经测试,单纯的加密解密函数没有问题,大家说问题会出在哪里?下面是我得加密解密函数,应该没什么问题吧?
{
  加解密函数,key是秘钥,SeedA和SeedB是种子.bEncrypt为true的时候加密,false解密.
}
function Crypt(const s: string; Key: Word; const bEncrypt: boolean = True): string;
var
  i: integer;
  ps, pr: ^byte;
begin
  SetLength(Result, Length(s));
  ps := @s[1];
  pr := @Result[1];
  for i := 1 to length(s) do
  begin
    pr^ := ps^ xor (Key shr 8);
    if bEncrypt then
      Key := (pr^ + Key) * SeedA + SeedB
    else
      Key := (ps^ + Key) * SeedA + SeedB;
    pr := pointer(integer(pr) + 1);
    ps := pointer(integer(ps) + 1);
  end
end;

解决方案 »

  1.   

    我现在没有DELPHI,我没有仔细测试。但是可以提醒你一句。
    写入文件中,再读到TSTRINGLIST中,
    如果你的一行字符中有逗号或空格时会被分成两段,
    在TSTRINGLIST中也分成两个节点来的。
      

  2.   

    加密后可能是有#13#10这类的字符,当然会分两个String啦
    你取Stringlist.text的内容就对了,不要用Stringlist[0], Stringlist[1]之类取
      

  3.   

    我也怀疑是加密的时候有分隔符出现。问题是我不知道TStringList的分割符有哪些,该怎么避免呢?