Newsgroup: it.comp.lang.delphi
Titolo: [DELPHI 6] Lista file

Salve a tutti,
era un pò che non venivo su questo newsgroup [e meno male direte voi ...],
comunque adesso ho un piccolo problema: vorrei creare una lista di file
contenuta nella directory.
Avevo in mente di creare un file con nome e lunghezza di ogni singolo file
contenuto in questa directory e poi magari poter rileggere in un secondo
momento questa lista per confrontare con i file contenuti in un altro posto.
Avete una minima idea di come fare ?
Grazie,
--
Kaldais,
Admin di Euphrasia
http://euphrasia.igz.it

 Avete una minima idea di come fare ?
Dio, come mi sono spiegato male.
Vorrei creare un file txt dove č contenuta questa lista, ecco.



    Via De Gasperi, 14 - 42019
    Scandiano (Reggio Emilia)

>[CUT]
Quanto ti voglio bene :)
Ok, il check dei file funziona BENONE: ho seguito il consiglio dell'esempio
e l'ho messo tutto bello incolonnato.
Solo che non ho capito bene il sistema di ADD, cioč .. dovrei fare un repeat
o cosa ?
Grazie.


 o cosa ?
Ti ho scritto un piccolo esempio:
function GetFolderList(FolderToScan: String): TStringList;
var sRecord: TSearchRec;
begin
     result := TStringList.create;
     if FindFirst(FolderToScan ,faAnyFile, sRecord) = 0 then begin
        Result.Add(sRecord.Name);
        While FindNext(sRecord) = 0 do
            Result.Add(sRecord.Name);
     end;
     FindClose(sRecord)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.Assign(GetFolderList('c:\*.*'));
end;
--
- Carlo -


Esattamente cosě! :-)
E se vuoi ulteriormente perfezionare il codice garantendo la deallocazione
delle strutture dati create per la ricerca dei file, potresti racchiudere il
blocco di istruzioni in un costrutto "try...finally":
===
  if FindFirst(....) = 0 then
  begin
    try
      while FindNext(...) = 0 do
        ...;
    finally
      FindClose(...);
    end;
  end;
===
Nel tuo caso dovrebbe essere comunque difficile che venga generata
un'eccezione se il codice č stato scritto correttamente.


 un'eccezione se il codice è stato scritto correttamente.
Hum, grazie mille.
Ma se vorrei mettere i files in una TListView ?
Ho capito ListView1.AddItem(Item, AObject); ma su AObject che ... biiip ci
devo mettere ?


o cosa ?
procedure GetFileList(Mask: String; L: TStrings);
var
  F: TSearchRec;
begin
  try
    if FindFirst(Mask, faAnyFile, F) = 0 then
    begin
      repeat
        L.Add(F.Name);
      until FindNext(F) <> 0;
    end;
  finally
    FindClose(F);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Clear;
  GetFileList('C:\*.*', ListBox1.Items);
end;
-- 
Andrea Laforgia
#exclude <windows.h>

  ListBox1.Items.Assign(GetFolderList('c:\*.*'));
                         ^^^
Sconsigliabile, allochi ma non deallochi.


devo mettere ?
// usi la GetFileList che ti ho mostrato:
procedure TForm1.Button1Click(Sender: TObject);
var
  L: TStringList;
  I: Integer;
begin
  L := TStringList.Create;
  try
    GetFileList('C:\*.*', L);
    for I := 0 to L.Count-1 do
    begin
      with ListView1.Items.Add do
        Caption := L.Strings[I];
    end;
  finally
    L.Free;
  end;
end;


 Sconsigliabile, allochi ma non deallochi.
Non ho capito cosa vuoi dire.
--
- Carlo -

Non ho capito cosa vuoi dire.
Nella tua funzione esegui la creazione di un oggetto e ne perdi il
riferimento per la deallocazione.  Questo fenomeno si chiama "memory
leak".


 Sconsigliabile, allochi ma non deallochi.
Anch'io in passato usavo funzioni che ritornavano TStringList e proprio per
questo dubbio avevo lasciato perdere, ma non ho mai approfondito.
Adesso uso procedure a cui passo le stringlist come parametri, e demando al
caller la creazione/distruzione; dici che č meglio cosě (anche se
effettivamente č meno comodo)?
-- 
Jax
Journeying Artificial Xenomorph

effettivamente č meno comodo)?
Sě, per il modello a oggetti di Delphi, č meglio cosě.
