![]() |
|
|
|
|
#1
|
|||
|
|||
|
Добрый вечер!
У меня есть такой код: Код:
procedure TForm1.EnDecryptFile(pathin, pathout: string; Chave: Word);
var
InMS, OutMS: TMemoryStream;
cnt: Integer;
C: byte;
begin
InMS := TMemoryStream.Create;
OutMS := TMemoryStream.Create;
try
InMS.LoadFromFile(pathin);
InMS.Position := 0;
for cnt := 0 to InMS.Size - 1 DO
begin
InMS.Read(C, 1);
C := (C xor not (ord(chave shr cnt)));
OutMS.Write(C, 1);
end;
OutMS.SaveToFile(pathout);
finally
InMS.Free;
OutMS.Free;
end;
end;использую его для 2 файлов, вообщем когда нажимаю кнопку выполняеться код: Код:
EnDecryptFile(program_dbdir, program_dbdir, program_dbkey); ADOConnection1.Connected:=True; ADODataSet1.Active:=True; ............... ADODataSet1.Active:=False; ADOConnection1.Connected:=False; EnDecryptFile(program_dbdir, program_dbdir, program_dbkey); При первом запуске все нормально, но если повторить запуск, то пишет мол "Процесс не может получить доступ к файлу, так как он занят другим процессом". Я так понял ошибка в Код:
EnDecryptFile Помогите решить проблему |
|
#2
|
|||
|
|||
|
Попробуй поменять TMemoryStream на TFileStream.
|
|
#3
|
|||
|
|||
|
выскакивают разные ошибки(
напишите пожалуйста рабочий пример |
|
#4
|
||||
|
||||
|
Цитата:
Простой пример: Код:
procedure TForm1.Button1Click(Sender: TObject);
var
InFS, OutFS: TFileStream;
C: Byte;
begin
InFS := TFileStream.Create('Имя исходного файла', fmOpenRead);
try
OutFS := TFileStream.Create('Имя выходного файла', fmCreate);
try
while InFS.Read(C, 1) > 0 do
begin
C := C xor $AA;
OutFS.WriteBuffer(C, 1);
end;
finally
OutFS.Free;
end;
finally
InFS.Free;
end;
end; |
|
#5
|
|||
|
|||
|
немного переделал ваш код и добавил 1 функцию и все работает как нужно)
спасибо) |
|
#6
|
|||
|
|||
|
да блин, опять тоже самое
1 раз когда нажимаю кнопку, то нормально работает, а когда еще раз, то опять пишет "Процесс не может получить доступ к файлу, так как он занят другим процессом" использую: Код:
procedure TForm1.EnDecryptFile(pathin, pathout: string; Chave: Word);
var
InFS, OutFS: TFileStream;
cnt: integer;
C: Byte;
begin
cnt:=0;
InFS := TFileStream.Create(program_dbdir, fmOpenRead);
try
OutFS := TFileStream.Create(program_dbdir1, fmCreate);
try
while InFS.Read(C, 1) > 0 do
begin
cnt:=cnt+1;
C := (C xor not (ord(chave shr cnt)));
OutFS.WriteBuffer(C, 1);
end;
finally
OutFS.Free;
end;
finally
InFS.Free;
end;
end;показывает на ету строку: InFS := TFileStream.Create(program_dbdir, fmOpenRead); Последний раз редактировалось JeReK5542, 18.12.2013 в 20:58. |