用memoMiWen.lines.loadfromfile(a.txt)读入文件后再手工转换一下。 s : string;i := 0; s := ''; with memoMiWen.lines do begin while i = count do begin s := strings[i-1]+'#13#10'; i := i+1; end; end;
我都这样了,还是不行procedure TfrmMain.btnOpen2Click(Sender: TObject); Var str : string;s:Tstringlist; i,n:integer ; begin if opendialog1.Execute then begin memo2.Lines.Clear; filename:=opendialog1.FileName; //memo2.Lines.LoadFromFile (filename); s:=Tstringlist.Create; s.LoadFromFile(filename); n:=length(s.text) ; for i:=1 to n do begin if s.text[i]=#13 then str:=str+#$D // or '#$D' ? else if s.text[i]=#10 then str:=str+#$A else str:=str+s.text[i]; end; memo2.Lines.Append (str); s.free; end; end;
保存 var s : string; ms : TMemoryStream; begin ms := TMemoryStream.Create; try s := 你的密文; ms.Write(Pointer(s)^,length(s)); ms.savetoFile('a.txt'); finally ms.Free; end; end;读取 var s : string; ms : TMemoryStream; begin ms := TMemoryStream.Create; try ms.LoadFromFile('a.txt'); ms.Position := 0; setlength(s,ms.size); ms.Read(Pointer(s)^,ms.Size); //现在s中就是你的密文 finally ms.Free; end; end;
s : string;i := 0;
s := '';
with memoMiWen.lines do
begin
while i = count do
begin
s := strings[i-1]+'#13#10';
i := i+1;
end;
end;
Var str : string;s:Tstringlist; i,n:integer ;
begin
if opendialog1.Execute then
begin
memo2.Lines.Clear;
filename:=opendialog1.FileName;
//memo2.Lines.LoadFromFile (filename);
s:=Tstringlist.Create;
s.LoadFromFile(filename); n:=length(s.text) ; for i:=1 to n do
begin
if s.text[i]=#13 then
str:=str+#$D // or '#$D' ?
else if s.text[i]=#10 then
str:=str+#$A
else str:=str+s.text[i];
end; memo2.Lines.Append (str);
s.free;
end;
end;
然后再用#13#10替换掉'#13#10'
用 TMemoryStream,或者其他的不就可以了?
var
s : string;
ms : TMemoryStream;
begin
ms := TMemoryStream.Create;
try
s := 你的密文;
ms.Write(Pointer(s)^,length(s));
ms.savetoFile('a.txt');
finally
ms.Free;
end;
end;读取
var
s : string;
ms : TMemoryStream;
begin
ms := TMemoryStream.Create;
try
ms.LoadFromFile('a.txt');
ms.Position := 0;
setlength(s,ms.size);
ms.Read(Pointer(s)^,ms.Size);
//现在s中就是你的密文
finally
ms.Free;
end;
end;
给你一个例子:
//定义一个加密流
//这里加密算法很简单,只是对每个字符加一个值Key。复杂的加密算法,自己可以更改。
unit Encode;interfaceuses
Windows, Messages, SysUtils, Classes;type
TEncodedStream = Class(TFileStream)
private
FKey: Char;
public
constructor Create(const FileName: string; Mode: Word);
function Read(var Buffer; Count: Longint): Longint; override;
function Write(const Buffer; Count: Longint): Longint; override;
property Key: Char read FKey Write FKey default 'A';
end;implementation{ TEncodeStream }constructor TEncodedStream.Create(const FileName: string; Mode: Word);
begin
inherited Create(FileName, Mode);
Key := 'A';
end;function TEncodedStream.Read(var Buffer; Count: Integer): Longint;
var
pBuf, pEnc: PChar;
I, CountRead, EncVal: Integer;
begin
GetMem(pEnc, Count);
try
//读取加密过的内容
CountRead := inherited Read(pEnc^, Count);
pBuf := PChar(@Buffer); //解密
for I := 0 to (CountRead - 1) do
begin
EncVal := (Ord(pEnc[I]) - Ord(Key)) mod 256;
pBuf[I] := Chr(EncVal);
end;
finally
FreeMem(pEnc, Count);
end;
Result := CountRead;
end;function TEncodedStream.Write(const Buffer; Count: Integer): Longint;
var
pBuf, pEnc: PChar;
I, EncVal: Integer;
begin
GetMem(pEnc, Count);
try
pBuf := PChar(@Buffer); //加密与存储
for I := 0 to (Count - 1) do
begin
EncVal := (Ord(pBuf[I]) + Ord(Key)) mod 256;
pEnc[I] := Chr(EncVal);
end;
//把加密的内容写入文件中
Result := inherited Write(pEnc^, Count);
finally
FreeMem(pEnc, Count);
end;
end;end.//然后例子中用这个加密流进行操作。
//例子中,有两个Memo和三个按钮。其作用下面有注释
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TfrmMain = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
btnLoadPlain: TButton;
btnSaveEncoded: TButton;
btnLoadEncoded: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure btnLoadPlainClick(Sender: TObject);
procedure btnLoadEncodedClick(Sender: TObject);
procedure btnSaveEncodedClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmMain: TfrmMain;implementation{$R *.DFM}uses
Encode;
//用平常的模式读取数据到Memo1中
procedure TfrmMain.btnLoadPlainClick(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;//对加密过的文件读取到Memo2中
procedure TfrmMain.btnLoadEncodedClick(Sender: TObject);
var
EncStr: TEncodedStream;
begin
if OpenDialog1.Execute then
begin
EncStr := TEncodedStream.Create(OpenDialog1.FileName, fmOpenRead);
try
Memo2.Lines.LoadFromStream(EncStr);
finally
EncStr.Free;
end;
end;
end;
//对未加密的Memo1内容进行加密保存
procedure TfrmMain.btnSaveEncodedClick(Sender: TObject);
var
EncStr: TEncodedStream;
begin
if SaveDialog1.Execute then
begin
EncStr := TEncodedStream.Create(SaveDialog1.FileName, fmCreate);
try
Memo1.Lines.SaveToStream(EncStr);
finally
EncStr.Free;
end;
end;
end;end.试一下是否达到你需要的效果?
您的方法我研究一下
交个朋友? oicq 944202 Archy(请注名您的姓名)