[ Tamo Neki @ 06.06.2013. 00:41 ] @
Kako da konvertujem ovaj buffer array of char u string da bih mogao da pozovem funkciju koja ce enkriptovati buffer?
Code:

function RC4(Expression, Password: string): string;

procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var
   FromF, ToF: file of byte;
   Buffer: array[0..4096] of char;
   NumRead,i: integer;
   FileLength: longint;
begin
   AssignFile(FromF, Source);
   reset(FromF);
   AssignFile(ToF, Destination);
   rewrite(ToF);
   FileLength := FileSize(FromF);
   with Progressbar1 do
   begin
     Min := 0;
     Max := FileLength;
     while FileLength > 0 do
     begin
       BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);     

       Buffer := RC4(Buffer, 'key');
      //Incompatible types: 'Array' and 'String'

       FileLength := FileLength - NumRead;
       BlockWrite(ToF, Buffer , NumRead);
       Position := Position + NumRead;
     end;
     CloseFile(FromF);
     CloseFile(ToF);
   end;
end;


Ili ako neko zeli moze da postavi primer enkripcije fajla sa prikazom progres bara?
[ reiser @ 06.06.2013. 00:44 ] @
Code:

function ArrayToString(const a: array of Char): String;
begin
  if Length(a) > 0 then
    SetString(result, PChar(@a[0]), Length(a))
  else
    result := '';
end;
[ Rapaic Rajko @ 06.06.2013. 11:37 ] @
Hm... par stvari ;)

1) Nisam siguran (pogotovo za starije Delphi-je, recimo 7) da su array of char i array[0..4096] of char kompatibilni..? Ono prvo je dinamicki niz, zar ne?
2) Deklaracija array[0..4096] of char je vrlo, da tako kazemo, nesrecna :) . To zato sto length(...) vraca 4097; ciljalo se valjda na velicinu zapisa na disku, koji je (u svakom slucaju) stepen dvojke.

Pozz
[ Tamo Neki @ 06.06.2013. 13:52 ] @
Hvala obojici, radi!

Mislim da nisam postavio najbolji primer procedure i verovatno je postupak nesto sporiji jer moram da konvertujem bufer niz u string, narocito ako se radi o nesto vecim fajlovima. -Ili to mozda nije tako primetno?

Moze li neko da mi pomogne kako da podesim svojstva za Max i Position na progress baru? :)

Code:

procedure TForm1.Button1Click(Sender: TObject);
var
          sBuffer : String;
          iStream : TFileStream;
          MyFile  : TFileStream;
begin
          SetLength(sBuffer, 1024);

          iStream := TFileStream.Create('Read.exe',0);
          MyFile := TFileStream.Create('Write.exe',fmCreate);

          Form1.Progressbar1.Min := 0;
          //Form1.Progressbar1.Max:= FileSize(

          while iStream.Position <> iStream.Size do
          begin
             iStream.Read(sBuffer[1],Length(sBuffer));
             sBuffer := RC4(sBuffer, 'Key');
             MyFile.Write(sBuffer[1],Length(sBuffer));
             //Form1.Progressbar1.Position := Position +
          end;

          iStream.Free;
          MyFile.Free;
end;