我把一个字符串写成一个二进制文件,然后在读出来,进行还原成字符串,请问怎么做,谢谢,急啊,各位请给个简单源码。

解决方案 »

  1.   

    比如我把一个字符串“jfksfjksjfskjfskjf”,写成文件制文件,然后我再读出来,还原成"jfksfjksjfskjfskjf"写是这样做的:
    tempStr:=Pchar(eString);
    Fsize:= length(eString);
    AssignFile(DataFile,Filename);
    ReWrite(DataFile,1);
    BlockWrite(DataFile,tempStr,Fsize);
    closeFile(DataFile);现在我就是读的时候怎么也还原不了。求教,是不是写就不应该这样写?
      

  2.   

    比如我把一个字符串“jfksfjksjfskjfskjf”,写成二进制文件,然后我再读出来,还原成"jfksfjksjfskjfskjf"写是这样做的:
    tempStr:=Pchar(eString);
    Fsize:= length(eString);
    AssignFile(DataFile,Filename);
    ReWrite(DataFile,1);
    BlockWrite(DataFile,tempStr,Fsize);
    closeFile(DataFile);读:
     AssignFile(DataFile,Filename);
     reset(DataFile,1);
     Fsize:=FileSize(DataFile);
     GetMem(buf,1024);
     repeat
        BlockRead(DataFile,buf,64,rsize);
     until rsize=0; buf[Fsize]:= #0;
     tempString:= String(buf);
      

  3.   

    Buf: array[1..2048] of Char;BlockRead(DataFile, Buf, SizeOf(Buf), NumRead);
      

  4.   

    参考:
    http://delphi.about.com/od/fileio/a/untypedfiles.htm另外,这篇文章的用词“Unknown Structure File”,我觉得比“二进制文件”要好一些。
      

  5.   

    同意lihuasoft(坐井观天) 
    其实所有的东西在存储的时候都是一样,不同的是你看待他和处理他的方式不同而已。
    经常会看到问二进制转十六进制转十进制的问题。
    感觉都是这些表面的称呼掩盖了事物的本质。
      

  6.   

    TO 楼主:字符串是一块连续的内存,有BlockWrite整块地写入到文件中,如果你用记事本打开,仍然能够看到一模一样的字符串。这是为什么?如果你明白了为什么,也就明白了我和heluqing为什么一直在说“二进制文件”这个话题了。下面是按你的要求,用BlockRead/BlockWrite读写字符串到内存/文件。procedure TForm1.Button1Click(Sender: TObject);
    var
      Str : string;
      F   : File;
      R   : integer;
    begin
      Str := 'abcdefghijklmn1234567890';
      AssignFile(F, 'C:\TEST.STR');
      ReWrite(F, 1);
      BlockWrite(F, Str[1], Length(Str), R);
      CloseFile(F);
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      Buf : array of Char;
      F   : File;
      R   : integer;
      Str : string;
    begin
      AssignFile(F, 'C:\TEST.STR');
      ReSet(F, 1);
      SetLength(Buf, FileSize(F));
      BlockRead(F, Buf[0], FileSize(F), R);
      CloseFile(F);
      Str := string(@Buf[0]);
      ShowMessage(Str);//'abcdefghijklmn1234567890'
    end;上面只是一次性地整块写入和读出。如果是很长的字符串,需要用循环的。就如在前面我给过你一个网址说的。
      

  7.   

    希望达到的效果就是存储后用编辑器打开是一堆乱码,而不是文本
    ------------------------------------------------------在给你代码之前我已经说过,把内存整块地复制到文件里去,如果用记事本等工具打开,仍然是你能看到的字符串。为什么?因为字符串在内存中本来就是二进制的,与存储到文件中的格式是一模一样的。既然你说出了你的目的,仅仅是想让别人打开该文件时显示一片乱码,那你就不要在“二进制”这上面动脑筋了。前面反复地说反复地说,就是在说明你的努力方向有问题。要实现你的目的,很容易:第一种方案:用一个字符串加密解密函数,例如Base64编码函数,这样,存储在文件中的就是加密后的字符串,你需要还原时,解密就行了。这样的函数有许多,你自己写也可以。第二种方案:把字符串的每个字符的Byte值转换为十六进制字符串,然后存储就行了第三种方案:.....
      

  8.   

    第三种方案:如果原字符串是WideString,并且内容是汉字,那么把每个WideChar的高字节与低字节互换,存储后一定是乱码的。这其实还是在加密,只不过加密的算法太简单而已。第四种方案:....(我临时还没想出来)你随便选一种方案好了。你也可以自己想出一些类似的方案。
    Base64等函数,网上有现成的,自己下载就好了