Lavorare con le directory

Capita spesso che si debba lavorare con le directory e i loro contenuti. Lazarus/Free Pascal permette queste operazioni in maniera facile ed intuitiva.

Segue un piccolo esempio di una Form con un Button (Nome=Button1) e una ListBox(Nome=ListBox1), quando si preme sul button1 il programma legge tutto il contenuto delle cartella in cui si trova l'eseguibile rinomina tutti i file (di 21 caratteri, estensioni comprese) in esso contenuti togliendo i primi 4 caratteri partendo da sinista.

Segue l'esempio, spero possa essere utile a qualcuno.

unit Unit1;


{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
   Info : TSearchRec;
   Count : Longint;
   fecha, fecha2:Tdate;
   fechatmp, fechatmp2:longint;
   Spazio: int64;
   filename:string;
   PercIncrem: double;
   Percorso, NuovoNome: string;
   k: integer;
begin
           Percorso:=Application.Location;
           //se volessi leggere un altra cartella dovrei scrivere: If FindFirst (NomeAltraDirectory + '*',faAnyFile and faDirectory,Info)=0 then
           If FindFirst ('*',faAnyFile and faDirectory,Info)=0 then
           begin
                Repeat
                      With Info do
                      begin
                           if ((Name='.') OR (Name='..')) then
                           begin

                           end
                           else
                           begin
                                If (Attr and faDirectory) = faDirectory then
                                begin
                                     //è una dir e la ignoro
                                end
                                else

                                begin

                                        Spazio:=size; //salvo la dimensione del file (non la uso ma è per far vedere che c'è la possibilità)

                                     filename:=Percorso + Name;

                                     if Length(name)=21 then
                                     begin
                                          NuovoNome:=RightStr(Name,Length(Name)-4);

                                          ListBox1.Items.Add(filename + ' --> ' + NuovoNome);
                                          RenameFile(filename, NuovoNome);
                                     end;

                                end;
                           end;
                      end;
                Until FindNext(info)<>0;
           end;
           FindClose(Info);
           ShowMessage('Terminato');
end;

end.




SMF 2.0.8 | SMF © 2011, Simple Machines
Privacy Policy
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article