1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
---------------------------------------------------------------
-- Recupere et affiche le contenu du repertoire en parametre --
---------------------------------------------------------------
PROCEDURE get_list_rep (PC$Rep IN VARCHAR2) IS
LN$Lettre pls_integer := 1 ;
LC$Rep Varchar2(256) := PC$Rep ;
LC$Filtre Varchar2(30) ;
fic_out TEXT_IO.FILE_TYPE ;
fic_name Varchar2(256) ;
fichier Varchar2(256) ;
LI$NumDrive pls_integer := 1 ;
LC$Cmd Varchar2(256) ;
LC$Ligne Varchar2(256) ;
LI$Num pls_integer := 1 ;
LI$Pos pls_integer ;
BEGIN
If Substr( LC$Rep, Length(LC$Rep) -2, 3 ) = '\..' And Length( LC$Rep ) > 5 Then
-- Retour arriere dans l'arborescence --
:CTRL.Chemin := Substr( LC$Rep, 1, Instr( LC$Rep, '\', -1, 2 ) - 1);
LC$Rep := :CTRL.Chemin ;
End if ;
clear_list('CTRL.REPS');
-- Nom du fichier de sortie --
fichier := Ltrim( To_char( SYSDATE, 'YYYYDDMMHH24MISS' ) ) || '_lst_fic.txt' ;
fic_name := :CTRL.MAIN_DRIVE || '\' || fichier ;
-- Liste des répertoires --
If :CTRL.FILTRE <> '*.*' Then
LC$Cmd := 'DIR /AD "' || LC$Rep || '\" > ' || fic_name ;
Host( LC$Cmd, NO_SCREEN ) ;
End if ;
-- Filtre multi-choix ? --
If Instr( :CTRL.FILTRE, ',' ) > 0 Then
LI$Pos := 1 ;
Loop
LC$Filtre := Split( :CTRL.FILTRE, LI$Pos ) ;
Exit When LC$Filtre IS NULL ;
LC$Cmd := 'DIR /OGN "' || LC$Rep || '\' || LC$Filtre || '" >> ' || fic_name ;
Host( LC$Cmd, NO_SCREEN ) ;
LI$Pos := LI$Pos + 1 ;
End loop ;
Else
LC$Cmd := 'DIR /OGN "' || LC$Rep || '\' || :CTRL.FILTRE || '" >> ' || fic_name ;
Host( LC$Cmd, NO_SCREEN ) ;
End if ;
-- Lecture de la liste des fichiers --
fic_out := TEXT_IO.FOPEN( fic_name, 'R' ) ;
If TEXT_IO.IS_OPEN( fic_out ) Then
Begin
Loop
TEXT_IO.Get_Line( fic_out, LC$Ligne ) ;
If LC$Ligne is not null Then
If Substr( LC$Ligne, 25, 5 ) = '<DIR>' Then
-- nom de repertoire --
If Substr( LC$Ligne, 40, 2 ) <> '.' Then
LI$Num := LI$Num + 1 ;
Add_List_Element( 'CTRL.REPS', LI$Num, '\' || Substr( LC$Ligne, 40, 256 ), '\' || Substr( LC$Ligne, 40, 256 ) ) ;
End if ;
Elsif Substr( LC$Ligne, 1, 1 ) <> ' ' Then
-- nom de fichier --
If Instr( LC$Ligne, fichier ) = 0 Then
LI$Num := LI$Num + 1 ;
Add_List_Element( 'CTRL.REPS', LI$Num, Substr( LC$Ligne, 40, 256 ), Substr( LC$Ligne, 40, 256 ) ) ;
End if ;
End if ;
End if ;
End loop ;
Exception
when no_data_found Then
TEXT_IO.FCLOSE( fic_out ) ;
HOST( 'DEL ' || fic_name, NO_SCREEN ) ;
End ;
Else
message('Impossible de lire : ' || LC$Rep );
End if ;
END; |
Partager