Changeset 238


Ignore:
Timestamp:
Sep 16, 2007, 9:44:46 AM (18 years ago)
Author:
RBRi
Message:

improved directory flag handling (see #31)

Location:
trunk
Files:
8 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Library/FileUtilsUnit.pas

    r235 r238  
    9494
    9595  // searches for all directories in aDirectory and add them to aList
    96   Procedure ListSubDirectories(const aDirectory: String; var aList: TStrings);
     96  Procedure ListSubDirectories(const aDirectory: String; const anIncludeSystemAndHiddenFlag: boolean; var aList: TStrings);
    9797
    9898  Procedure ListFilesInDirectoryRecursiveWithTermination(const aDirectory : String;
    9999                                                         const aFilter : String;
    100100                                                         const aWithDirectoryFlag : boolean;
     101                                                         const anIncludeSystemAndHiddenFlag: boolean;
    101102                                                         var aList : TStrings;
    102103                                                         const aTerminateCheck : TTerminateCheck;
     
    112113
    113114
    114 
     115  // Checks if a directory exists
    115116  Function DirectoryExists(const aDirectory : String) : boolean;
    116117
     
    502503
    503504
    504   Procedure ListSubDirectories(const aDirectory: String; var aList: TStrings);
     505  Procedure ListSubDirectories(const aDirectory: String; const anIncludeSystemAndHiddenFlag: boolean; var aList: TStrings);
    505506  var
    506507    tmpRC : APIRET;
    507508    tmpSearchResults: TSearchRec;
    508509    tmpName : String;
    509   begin
    510 
    511     tmpRC := FindFirst(AddDirectorySeparator(aDirectory) + '*', faDirectory or faMustDirectory, tmpSearchResults);
     510    tmpFileAttributes : ULONG;
     511  begin
     512
     513    if anIncludeSystemAndHiddenFlag then
     514    begin
     515      tmpFileAttributes := faArchive or faReadonly or faHidden or faSysFile or faDirectory or faMustDirectory;
     516    end
     517    else
     518    begin
     519      tmpFileAttributes := faArchive or faReadonly or faDirectory or faMustDirectory;
     520    end;
     521
     522    tmpRC := FindFirst(AddDirectorySeparator(aDirectory) + '*', tmpFileAttributes, tmpSearchResults);
    512523    if (tmpRC <> 0) then
    513524    begin
     
    531542                                                         const aFilter : String;
    532543                                                         const aWithDirectoryFlag : boolean;
     544                                                         const anIncludeSystemAndHiddenFlag: boolean;
    533545                                                         var aList : TStrings;
    534546                                                         const aTerminateCheck : TTerminateCheck;
     
    544556    // now determine all subdirectories
    545557    tmpSubDirectories := TStringList.Create;
    546     ListSubDirectories(aDirectory, tmpSubDirectories);
     558    ListSubDirectories(aDirectory, anIncludeSystemAndHiddenFlag, tmpSubDirectories);
    547559
    548560    for i := 0 to tmpSubDirectories.Count - 1 do
     
    555567      tmpSubDirectory := tmpSubDirectories[i];
    556568
    557       ListFilesInDirectoryRecursiveWithTermination(tmpSubDirectory, aFilter, aWithDirectoryFlag, aList, aTerminateCheck, aUseTerminateCheck);
     569      ListFilesInDirectoryRecursiveWithTermination(     tmpSubDirectory,
     570                                                        aFilter,
     571                                                        aWithDirectoryFlag,
     572                                                        anIncludeSystemAndHiddenFlag,
     573                                                        aList,
     574                                                        aTerminateCheck,
     575                                                        aUseTerminateCheck);
    558576    end;
    559577    tmpSubDirectories.Destroy;
     
    653671    end;
    654672
    655     tmpRC := FindFirst(tmpDirectory, faDirectory or faMustDirectory, tmpSearchResults);
     673    tmpRC := FindFirst( tmpDirectory,
     674                        faArchive or faReadonly or faHidden or faSysFile or faDirectory or faMustDirectory,
     675                        tmpSearchResults);
    656676    if tmpRC = 0 then
    657677    begin
  • trunk/unittests/FileUtilsUnitTests.pas

    r224 r238  
    711711    tmpResult := TStringList.Create;
    712712
    713     ListSubDirectories(TEST_PATH + '\unittests\testdir\subdir1', tmpResult);
     713    ListSubDirectories(TEST_PATH + '\unittests\testdir\subdir1', false, tmpResult);
    714714
    715715    assertEqualsInt('testListSubDirectories_None', 0, tmpResult.count);
     
    719719
    720720
     721  Procedure testListSubDirectories_NoneWithHidden;
     722  var
     723    tmpResult : TStringList;
     724  begin
     725    tmpResult := TStringList.Create;
     726
     727    ListSubDirectories(TEST_PATH + '\unittests\testdir\subdir1', true, tmpResult);
     728
     729    assertEqualsInt('testListSubDirectories_NoneWithHidden', 1, tmpResult.count);
     730    assertEqualsString('testListSubDirectories_NoneWithHidden', TEST_PATH + '\unittests\testdir\subdir1\.svn', tmpResult[0]);
     731
     732    tmpResult.Destroy;
     733  end;
     734
     735
    721736  Procedure testListSubDirectories_Many;
    722737  var
     
    725740    tmpResult := TStringList.Create;
    726741
    727     ListSubDirectories(TEST_PATH + '\unittests\testdir', tmpResult);
    728 
    729     assertEqualsInt('testListSubDirectories_Many', 1, tmpResult.count);
    730     assertEqualsString('testListSubDirectories_Many', TEST_PATH + '\unittests\testdir\subdir1', tmpResult[0]);
    731 
    732     tmpResult.Destroy;
    733   end;
    734 
    735 
    736   // ----------------------------------------------------------
    737 
    738 
    739   Procedure testListFilesInDirectoryRecursiveWithTerminationWithDirectoryInResult;
    740   var
    741     tmpResult : TStringList;
    742   begin
    743     tmpResult := TStringList.Create;
    744 
    745     ListFilesInDirectoryRecursiveWithTermination(TEST_PATH + '\unittests\testdir', '*.ex1;ex2', true, tmpResult, nil, false);
     742    ListSubDirectories(TEST_PATH + '\unittests\testdir', false, tmpResult);
     743
     744    assertEqualsInt('testListSubDirectories_Many', 3, tmpResult.count);
     745    assertEqualsString('testListSubDirectories_Many', TEST_PATH + '\unittests\testdir\dir_archived', tmpResult[0]);
     746    assertEqualsString('testListSubDirectories_Many', TEST_PATH + '\unittests\testdir\dir_readonly', tmpResult[1]);
     747    assertEqualsString('testListSubDirectories_Many', TEST_PATH + '\unittests\testdir\subdir1', tmpResult[2]);
     748
     749    tmpResult.Destroy;
     750  end;
     751
     752
     753  Procedure testListSubDirectories_ManyWithHidden;
     754  var
     755    tmpResult : TStringList;
     756  begin
     757    tmpResult := TStringList.Create;
     758
     759    ListSubDirectories(TEST_PATH + '\unittests\testdir', true, tmpResult);
     760
     761    assertEqualsInt('testListSubDirectories_ManyWithHidden', 6, tmpResult.count);
     762    assertEqualsString('testListSubDirectories_ManyWithHidden', TEST_PATH + '\unittests\testdir\.svn', tmpResult[0]);
     763    assertEqualsString('testListSubDirectories_ManyWithHidden', TEST_PATH + '\unittests\testdir\dir_archived', tmpResult[1]);
     764    assertEqualsString('testListSubDirectories_ManyWithHidden', TEST_PATH + '\unittests\testdir\dir_hidden', tmpResult[2]);
     765    assertEqualsString('testListSubDirectories_ManyWithHidden', TEST_PATH + '\unittests\testdir\dir_readonly', tmpResult[3]);
     766    assertEqualsString('testListSubDirectories_ManyWithHidden', TEST_PATH + '\unittests\testdir\dir_system', tmpResult[4]);
     767    assertEqualsString('testListSubDirectories_ManyWithHidden', TEST_PATH + '\unittests\testdir\subdir1', tmpResult[5]);
     768
     769    tmpResult.Destroy;
     770  end;
     771
     772
     773  // ----------------------------------------------------------
     774
     775
     776  Procedure testListFilesInDirectoryRecursiveWithTermination;
     777  var
     778    tmpResult : TStringList;
     779  begin
     780    tmpResult := TStringList.Create;
     781
     782    ListFilesInDirectoryRecursiveWithTermination(TEST_PATH + '\unittests\testdir', '*.ex1;ex2;file_in_*', false, false, tmpResult, nil, false);
     783
     784    assertEqualsInt('testListFilesInDirectoryRecursiveWithTermination', 5, tmpResult.count);
     785    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination 0', 'file1.ex1', tmpResult[0]);
     786    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination 1', 'file2.ex1', tmpResult[1]);
     787    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination 2', 'file_in_archived', tmpResult[2]);
     788    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination 3', 'file_in_readonly', tmpResult[3]);
     789    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination 4', 'file1.ex1', tmpResult[4]);
     790
     791    tmpResult.Destroy;
     792  end;
     793
     794
     795  Procedure testListFilesInDirectoryRecursiveWithTermination_WithHidden;
     796  var
     797    tmpResult : TStringList;
     798  begin
     799    tmpResult := TStringList.Create;
     800
     801    ListFilesInDirectoryRecursiveWithTermination(TEST_PATH + '\unittests\testdir', '*.ex1;ex2;file_in_*', false, true, tmpResult, nil, false);
     802
     803    assertEqualsInt('testListFilesInDirectoryRecursiveWithTermination_WithHidden', 7, tmpResult.count);
     804    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination_WithHidden 0', 'file1.ex1', tmpResult[0]);
     805    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination_WithHidden 1', 'file2.ex1', tmpResult[1]);
     806    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination_WithHidden 2', 'file_in_archived', tmpResult[2]);
     807    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination_WithHidden 3', 'file_in_hidden', tmpResult[3]);
     808    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination_WithHidden 4', 'file_in_readonly', tmpResult[4]);
     809    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination_WithHidden 5', 'file_in_system', tmpResult[5]);
     810    assertEqualsString('testListFilesInDirectoryRecursiveWithTermination_WithHidden 6', 'file1.ex1', tmpResult[6]);
     811
     812    tmpResult.Destroy;
     813  end;
     814
     815
     816  Procedure testListFilesInDirectoryRecursiveWithTermination_WithDirectoryInResult;
     817  var
     818    tmpResult : TStringList;
     819  begin
     820    tmpResult := TStringList.Create;
     821
     822    ListFilesInDirectoryRecursiveWithTermination(TEST_PATH + '\unittests\testdir', '*.ex1;ex2', true, false, tmpResult, nil, false);
    746823
    747824    assertEqualsInt('testListFilesInDirectoryRecursiveWithTerminationWithDirectoryInResult', 3, tmpResult.count);
     
    754831
    755832
    756   // ----------------------------------------------------------
    757 
    758 
    759   Procedure testListFilesInDirectoryRecursiveWithTermination;
    760   var
    761     tmpResult : TStringList;
    762   begin
    763     tmpResult := TStringList.Create;
    764 
    765     ListFilesInDirectoryRecursiveWithTermination(TEST_PATH + '\unittests\testdir', '*.ex1;ex2', false, tmpResult, nil, false);
    766 
    767     assertEqualsInt('testListFilesInDirectoryRecursiveWithTermination', 3, tmpResult.count);
    768     assertEqualsString('testListFilesInDirectoryRecursiveWithTermination', 'file1.ex1', tmpResult[0]);
    769     assertEqualsString('testListFilesInDirectoryRecursiveWithTermination', 'file2.ex1', tmpResult[1]);
    770     assertEqualsString('testListFilesInDirectoryRecursiveWithTermination', 'file1.ex1', tmpResult[2]);
     833  Procedure testListFilesInDirectoryRecursiveWithTermination_1WithDirectoryInResultWithHidden;
     834  var
     835    tmpResult : TStringList;
     836  begin
     837    tmpResult := TStringList.Create;
     838
     839    ListFilesInDirectoryRecursiveWithTermination(TEST_PATH + '\unittests\testdir', '*.ex1;ex2', true, true, tmpResult, nil, false);
     840
     841    assertEqualsInt('testListFilesInDirectoryRecursiveWithTerminationWithDirectoryInResultWithHidden', 3, tmpResult.count);
     842    assertEqualsString('testListFilesInDirectoryRecursiveWithTerminationWithDirectoryInResultWithHidden', TEST_PATH + '\unittests\testdir' + '\file1.ex1', tmpResult[0]);
     843    assertEqualsString('testListFilesInDirectoryRecursiveWithTerminationWithDirectoryInResultWithHidden', TEST_PATH + '\unittests\testdir' + '\file2.ex1', tmpResult[1]);
     844    assertEqualsString('testListFilesInDirectoryRecursiveWithTerminationWithDirectoryInResultWithHidden', TEST_PATH + '\unittests\testdir' + '\subdir1\file1.ex1', tmpResult[2]);
    771845
    772846    tmpResult.Destroy;
     
    10121086
    10131087    assertFalse('testDirectoryExists_NotExistent', tmpResult);
     1088  end;
     1089
     1090
     1091  Procedure testDirectoryExists_Archived;
     1092  var
     1093    tmpResult : Boolean;
     1094  begin
     1095    tmpResult := DirectoryExists(TEST_PATH + '\unittests\testdir\dir_archived');
     1096
     1097    assertTrue('testDirectoryExists_Archived', tmpResult);
     1098  end;
     1099
     1100
     1101  Procedure testDirectoryExists_Hidden;
     1102  var
     1103    tmpResult : Boolean;
     1104  begin
     1105    tmpResult := DirectoryExists(TEST_PATH + '\unittests\testdir\dir_hidden');
     1106
     1107    assertTrue('testDirectoryExists_Hidden', tmpResult);
     1108  end;
     1109
     1110
     1111  Procedure testDirectoryExists_Readonly;
     1112  var
     1113    tmpResult : Boolean;
     1114  begin
     1115    tmpResult := DirectoryExists(TEST_PATH + '\unittests\testdir\dir_readonly');
     1116
     1117    assertTrue('testDirectoryExists_Readonly', tmpResult);
     1118  end;
     1119
     1120
     1121  Procedure testDirectoryExists_System;
     1122  var
     1123    tmpResult : Boolean;
     1124  begin
     1125    tmpResult := DirectoryExists(TEST_PATH + '\unittests\testdir\dir_system');
     1126
     1127    assertTrue('testDirectoryExists_System', tmpResult);
    10141128  end;
    10151129
     
    11701284
    11711285    result.add(@testListSubDirectories_None);
     1286    result.add(@testListSubDirectories_NoneWithHidden);
    11721287    result.add(@testListSubDirectories_Many);
     1288    result.add(@testListSubDirectories_ManyWithHidden);
    11731289
    11741290    result.add(@testListFilesInDirectoryRecursiveWithTermination);
    1175     result.add(@testListFilesInDirectoryRecursiveWithTerminationWithDirectoryInResult);
     1291    result.add(@testListFilesInDirectoryRecursiveWithTermination_WithHidden);
     1292    result.add(@testListFilesInDirectoryRecursiveWithTermination_WithDirectoryInResult);
     1293    result.add(@testListFilesInDirectoryRecursiveWithTermination_1WithDirectoryInResultWithHidden);
    11761294
    11771295    result.add(@testParentDir_Empty);
Note: See TracChangeset for help on using the changeset viewer.