よろしくお願いします。
WindowsXP Delphi6 Personalです。
あるサイトで下記のような簡易暗号化ができるというコードを見つけて
aaaa.txt というテキストファイルを暗号化して
同じ名前のaaaa.txtで今まで何個も保存しました。(.datとでもして分けておけば良かったのですが)
このファイルを読み込んで、テキストファイルはそのまま、
そうでないときは複合化しなくてはなりません。
テキストの書き込みはDelphiで普通にWriteln(F,NewString);で書き込んだものです。
このテキストファイルかそうでないかを判別する旨い方法を教えてもらえませんか。
よろしくお願いします。
const
SEED = $12;
//Stringlistで渡せば暗号化してパスに落としてくれる
procedure TForm1.Angoka(var StringList:TStringList;Path:string);
var
fs: TFileStream;
i, Len: Integer;
buf: PChar;
begin
Len := Length(StringList.Text);
GetMem(buf, Len+1);
fs := TFileStream.Create(Path, fmCreate);
try
StrPCopy(buf,StringList.Text);
for i:=0 to Len-1 do
begin
Byte(buf[i]) := Byte(buf[i]) xor SEED;
end;
fs.Write(buf^, Len);
finally
FreeMem(buf);
fs.Free;
end;
end;
私はいつも、下のどこかで入手したコードを使用しています。
最初の300バイトを調べるようです。
function f_boTextOrBinFileCheck(saFileName: AnsiString): Boolean;
{
saFileName: 調べるファイル名
}
var
F: File;
Buf: array[0..300] of Char;
i,j: integer;
begin
Result := True;
if FileExists(saFileName) then begin
AssignFile(F, saFileName);
try
Reset(F, 1);
try
BlockRead(F, Buf, 300, i);
j := i;
for i := 0 to j - 1 do begin
if (
((Buf[i]>=#$00) and (Buf[i]<=#$08)) or
//$09:TAB
//$0A:LF
((Buf[i]>=#$0B) and (Buf[i]<=#$0C)) or
//$0D:CR
((Buf[i]>=#$0E) and (Buf[i]<=#$1F))
)then begin
Result := False;
Break;
end;
end;
finally
CloseFile(F);
end;
except
IOResult;
Result := False;
end;
end;
end;
manbonさん、早速教えて頂き有り難うございました。
コードをそのまま使わせて頂き、旨く解決できました。
実はずっと悩んでいたのです。
結構難しいことが解り質問させて頂きました。
有り難うございました。
ツイート | ![]() |