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.