Lister les répertoire et les fichiers d'un cd...

Soyez le premier à donner votre avis sur cette source.

Vue 14 175 fois - Téléchargée 1 494 fois

Description

Lister tous les dossiers et tous les fichiers d'un CD en affichant le chemin complet dans des listbox après avoir vérifier si un CD est présent dans le lecteur et en ayant récupéré son nom (sans utiliser DriveComboBox).
Vous aurez besoin de 1 Button, de 2 ListBox et de 1 ComboBox.
Le code est écrit sous D6 mais ça doit marcher pour les autres versions.

Source / Exemple :


unit UnitList1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;  {Sorted:=True} //qui affichera les dossiers
    ListBox2: TListBox;                 //qui affichera les fichiers
    ComboBox1: TComboBox;               //qui affiche les lecteurs CD du PC
    Button1: TButton;
    procedure LecteurCD(Combo:TComboBox); //juste les lecteur CD/CD-ROM/DVD...
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ChercheDossier(Liste:TListBox; route:string);
    procedure ChercheFichier(Liste:TListBox; route:string);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  Drive:Char;
  Repertoire:boolean;
  Chemin, NomCD:String;
  Ch:TSearchRec;
  Nb:integer;

implementation

{$R *.dfm}

function GetVolumeID(DriveChar:Char):string;
//récupère le nom du CD dans le lecteur. Si cette
//fonction est utilisé dans un autre programme, suspendre
//la gestion des erreurs pendant l'essai (SetErrorMode et Try)
var
 NU, VolFlags:DWord;
 Buf:array[0..MAX_PATH] of Char;
begin
  Buf[0]:=#$00;
  If GetVolumeInformation(PChar(DriveChar+':\'),Buf,DWord(Sizeof(Buf)),
     nil,NU,VolFlags,nil,0) then
  begin
   SetString(Result,Buf, StrLen(Buf));
  end;
  Result:=Result;
end;

procedure TForm1.LecteurCD(Combo:TComboBox);
// affiche dans le Combo que les lecteurs CD présents
begin
 Combo.Clear;
 For Drive:='A' to 'Z' do  //teste toutes les possibilitées
 begin
  If GetDriveType(PChar(Drive+':/'))=5 then  // 5 -> CD-ROM
  begin
   Combo.Items.Add('['+Drive+':] '+'CD-ROM');
  end;
 end;
 Combo.SelText:=Combo.Items.Strings[0];  //sélectionne le 1er de la liste
end;

procedure TForm1.ChercheDossier(Liste:TListBox; route:string);
// affiche dans "Liste" la liste des dossiers du CD (chemin complet)
begin
 Nb:=FindFirst(route+'*.*', faAnyFile,Ch);
 if Nb<>0 then
 begin
  Repertoire:=False;
  FindClose(Ch);
  Exit;
 end;
 While Nb=0 do begin
  if ((Ch.Attr and faDirectory)<>0) and (Ch.Name<>'.') then
  begin
   if (Ch.Name<>'..') then
   begin
    Liste.Items.Add(route+Ch.Name);
    Repertoire:=True;
   end;
  end;
  Nb:=FindNext(Ch);
 end;
 FindClose(Ch);
end;

procedure TForm1.ChercheFichier(Liste:TListBox; route:string);
// affiche dans "Liste" la liste des fichiers du CD (chemin complet)
begin
 Nb:=FindFirst(route+'*.*',faAnyFile,Ch);
 While Nb=0 do
 begin
  if (Ch.Attr and faDirectory)=0 then
   Liste.Items.Add(route+Ch.Name);
  Nb:=FindNext(Ch);
 end;
 FindClose(Ch);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 //initialise les données du combobox qu'avec les lecteurs CD
 LecteurCD(ComboBox1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 driveByte:byte;
begin
//vérifie si il y a un CD dans le lecteur
 case ComboBox1.Text[2] of    // cherche la correspondance
  'C': driveByte:=3;          // entre la lettre du lecteur
  'D': driveByte:=4;          // et sa position dans l'alphabet
  'E': driveByte:=5;
 end;
 if (DiskSize(driveByte))=-1 then
 begin
 Beep;
 MessageDlg(ComboBox1.Text[2]+':\ n''est pas accessible.'+#13+#10+
  'Le périphérique n''est pas prêt.', mtWarning, [mbOk], 0);
  exit;
 end;
 {puisqu'il y a un CD dans le lecteur, récupère le nom du CD}
 NomCD:=GetVolumeID(ComboBox1.Text[2]);
 ComboBox1.Text := Copy(ComboBox1.Text,1,4)+' '+NomCD;
// initialise les données
 ListBox1.Clear;
 ListBox2.Clear;
 Chemin:=Copy(ComboBox1.Text,2,2);  {juste la "Lettre" et les "2 points"}
 i:=-1;
// lister les dossiers et les sous-dossiers du CD
 ChercheDossier(ListBox1,Chemin+'\'); {liste la racine du CD}
 While Repertoire do
 begin
  inc(i);  {incrémente i de 1}
  if (Listbox1.Items.Count > i) then
  begin
   Chemin:=ListBox1.Items.Strings[i]+'\';
   ChercheDossier(ListBox1,Chemin);
  end
  else
  begin
   Repertoire:=False;
  end;
 end;
// lister les fichiers des dossiers du CD
 Chemin:=Copy(ComboBox1.Text,2,2);
 ChercheFichier(ListBox2, Chemin+'\');  {liste la racine du CD}
 for i:=0 to ListBox1.Count-1 do
 begin
  ChercheFichier(ListBox2,ListBox1.Items.Strings[i]+'\');
 end;
// affiche le nombre de fichiers et de dossiers
 Form1.Caption:=ComboBox1.Text+' comporte '+
  IntToStr(ListBox1.Count)+' dossiers et '+
  IntToStr(ListBox2.Count)+' fichiers.';
end;

end.

Conclusion :


Tout est dans le Zip (exe+source)
J'espère avoir assez détaillé le code
Merci pour les bouts de code que j'ai pu trouver sur ce site...;-)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.