|
#1
|
|||
|
|||
delphi xor
Добрый вечер!
У меня есть такой код: Код:
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. |
#7
|
|||
|
|||
все проблема решена)
|