Avatar of nkilla
nkilla
 asked on

Compress archives if a delphi memo

I would like to Capture the files that are in a particular folder and list all files in MEMO.
And where will have a label that counted the number of files listed

After listing these archives  a  memo, compress files into one so.
Format. Kom

Note: The file folder of this format. Moon

Could you help me with this?
What I really need to compress and share
Editors IDEsDelphi

Avatar of undefined
Last Comment
nkilla

8/22/2022 - Mon
Geert G

you are asking a question which is very cryptic

to list files: use TSearchRec and FindFirst, FindNext
lots of links here:
http://www.torry.net/search.htm

to compress, you need to think about the component you need to use
http://www.torry.net/pages.php?s=99
http://www.torry.net/pages.php?id=302
http://www.torry.net/pages.php?id=303

Moon ???
briangochnauer

This is how I do it; Hacked up my code to give you an example;
uses zlibex;
///////////////////////////////////////////////////////////////////
procedure TForm1.ClientDataset1AfterScroll(DataSet: TDataSet);
begin
  if DataSet.IsEmpty then exit;
  try
    if (not clientdataset1Field1.IsNull) and
      (clientdataset1Field1.AsString <> '') then
    Memo.Text :=  zlibex.ZDeCompressStr( clientdataset1Field1.AsString)
    else SysPrepStrings.Text :=  '';
  except
    on E:Exception do
    begin
    end;
  end;
end;
///////////////////////////////////////////////////////////////////
procedure Form1.ClientDataset1GetText(Sender: TField;
                                       var Text: string; DisplayText: Boolean);
begin
  if not (Sender is TMemoField) then exit;
  if TMemoField(Sender).AsString = '' then exit;
  try
    if (not clientdataset1Field1.IsNull) and
      (clientdataset1Field1.AsString <> '') then
    Text :=  zlibex.ZDeCompressStr(clientdataset1Field1.AsString)
    else Text :=  '';
  except
    on E:Exception do
    begin
    end;
  end;
  Memo1.Text := Text;
end;

Open in new window

ZLIBEX.PAS
ASKER CERTIFIED SOLUTION
briangochnauer

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
nkilla

ASKER
I do not understand very well
Well my code this way
Now I need to compress all files in the folder.
All files will listed on memo , and i compress this
Which are 258 files. Moon in python, which weighs 5 megs or so.

So I want to compress it all into a file with edited.kom 824kbytes
procedure TForm1.Button1Click(Sender: TObject);
begin
  tamanhoTotal := 0;
  memLista.Lines.Clear;
  ListarArquivos(edtDiretorio.Text, chkSub.Checked);
  Edit1.Text := IntToStr( tamanhoTotal );
end;

procedure TForm1.ListarArquivos(Diretorio: string; Sub:Boolean);
var
  F: TSearchRec;
  Ret: Integer;
  TempNome: string;
begin
  Ret := FindFirst(Diretorio+'\*.*', faAnyFile, F);
  try
    while Ret = 0 do
      begin
        if TemAtributo(F.Attr, faDirectory) then
          begin
            if (F.Name <> '.') And (F.Name <> '..') then
              if Sub = True then
                begin
                  TempNome := Diretorio+'\' + F.Name;
                  ListarArquivos(TempNome, True);
                end;
          end
        else
          begin
            memLista.Lines.Add(Diretorio+'\'+F.Name);
            tamanhoArquivo( Diretorio+'\'+F.Name );
          end;
        //
        Ret := FindNext(F);
      end;
  finally
    begin
      FindClose(F);
    end;
  end;
end;

function TForm1.TemAtributo(Attr, Val: Integer): Boolean;
begin
  Result := Attr and Val = Val;
end;

procedure TForm1.tamanhoArquivo(Arq: String);
var
  SR: TSearchRec;
  I: integer;
begin
  I := FindFirst(arq, faArchive, SR);
  try
    if I = 0 then
      tamanhoTotal := tamanhoTotal + ( SR.Size );
  finally
    FindClose(SR);
  end;
end;


end.

Open in new window

Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
briangochnauer

I have seen no definition of ?moon? or what a kom file is, but maybe something like;

memLista.Lines.SaveToFile('c:\text.txt');
then winexec a python script to read the text file and compress into a .kom file.

else I think your in the wrong forum zone.
nkilla

ASKER
Dont work =/
Is a complex encrypt
nkilla

ASKER
This solution resolved my problem thanks for helping experts
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.