파일을 바이너리로 읽어들여서 xor만 걸어줘서 암호화 하려고 하는데요...
바이너리 파일을 읽어들여서 배열에 xor를 이용하여 저장하기만 하면 되거든요..
여기저기 모아서 아래와 같이 코딩은 했는데...
fileBuffer[j] := fileBuffer[j] Xor 11 Xor 13 여기서 계속 에러가 나네요...
물론 이부분을 주석처리하면 피어있는 파일은 생성되구요...
암호화해서 파일을 생성해야 되는데 꼭좀 알료주세요...
토욜인데..아직 회사에서 이거 하구 있네요...
집에좀 보내주세요 ...ㅠ.ㅠ
===========코딩내용================
var
i, readBytes : integer;
j : LongInt;
myfile, myfile2 : file;
fileBuffer : array of byte;
begin
SearchDirectory(특정폴더의 파일을 검색하여 리스트박스에 저장); //파일검색 프로시져호출
for i := 0 to listbox1.Items.Count - 1 do
begin
assignfile(myfile,listbox1.Items.Strings[i]); <==리스트박스에는 경로명과 파일명 모두 저장되어 있습니다.
reset(myfile,1);
while not eof(myfile) do
begin
blockread(myfile,fileBuffer,sizeof(fileBuffer),readbytes); <==여기서 sizeof는 무슨역할을 하는지..궁금.
end; //while
for j := 0 to readbytes - 1 do
begin
fileBuffer[j] := fileBuffer[j] Xor 11 Xor 13; <===== 이부분
end; //for
closefile(myfile);
assignfile(myfile2,listbox1.Items.Strings[i]+'.sec'); <== sec라는 새로운 확장자로 저장해 줍니다...
rewrite(myfile2);
blockWrite(myfile2,fileBuffer,readBytes);
closefile(myfile2);
end; //for
end;
동적배열 쓰셨는데... 메모리 할당하고 해제하는 부분이 없네요...
그리고 파일에서 자료를 읽어오실때에는 동적배열은 사용하시지 않으시는 것이 좋을듯 하네요... 동적배열은 그냥 일반 배열하고 완전히 차원이 다른 자료형입니다. 흔히들 동적으로 생성하는거 빼놓고는 같다고 생각하시지만...
그냥 배열의 포인터를 쓰세요...
SizeOf는 자료형의 메모리상에서 차지하는 크기를 돌려주는 함수입니다.
예)
SizeOf(FileBuffer) = 4 // FileBuffer=>PFileBuffer=>Pointer
SizeOf(FileBuffer^) = 65536 // FileBuffer^=>TFileBuffer
SizeOf(TFileBuffer) = 65536
SizeOf(Integer) = 4
SizeOf(j) = 4 // j => integer
SizeOf(Word) = 2
type
PFileBuffer = ^TFileBuffer;
TFileBuffer = array[0..65535] of byte;
var
I, ReadBytes: Integer;
J: LongInt;
MyFile, MyFile2: file;
FileBuffer : PFileBuffer;
begin
GetMem(FileBuffer, SizeOf(TFileBuffer)); // 65536만큼 메모리 할당
//SearchDirectory(특정폴더의 파일을 검색하여 리스트박스에 저장);
for I := 0 to ListBox1.Items.Count - 1 do
begin
AssignFile(MyFile, ListBox1.Items.Strings[I]);
Reset(MyFile,1);
AssignFile(MyFile2, ListBox1.Items.Strings[I]+'.sec');
Rewrite(MyFile2);
while not Eof(MyFile) do
begin
BlockRead(MyFile, FileBuffer^, SizeOf(TFileBuffer), ReadBytes);
for J := 0 to ReadBytes - 1 do
begin
FileBuffer[J] := FileBuffer[J] Xor 11 Xor 13;
end; //for
BlockWrite(MyFile2, FileBuffer^, ReadBytes);
end; //while
CloseFile(MyFile);
CloseFile(MyFile2);
end;
FreeMem(FileBuffer);
end;
^^ 항상 즐코하세요...