в определенном пути (. Например C:\foo\bar\
), у меня есть неопределенное количество каталога с именем с целым числом, например .:Delphi: получить имя каталога максимального целого в определенном пути
C:\foo\bar\0\
C:\foo\bar\1\
C:\foo\bar\2\
C:\foo\bar\9\
C:\foo\bar\10\
C:\foo\bar\100\
я хотел бы получить целое каталог макс названный в C:\foo\bar\
пути, в этом случае составляет 100
Мой код работает, но медленно:
function GetMaxDir(const APath : String) : integer;
var
LList : TStringDynArray;
I : Integer;
EndFor : Integer;
CurrDir : string;
CurrVer : Integer;
begin
Result := -1;
if not DirectoryExists(APath) then Exit;
LList := TDirectory.GetDirectories(APath);
EndFor := Length(LList) - 1;
CurrVer := 0;
for I := 0 to EndFor do begin
CurrVer := 0;
CurrDir := ExtractFileName(LList[I]); // return path leaf (the integer)
TryStrToInt(CurrDir, CurrVer);
if CurrVer > Result then Result := CurrVer;
end;
end;
использование, например .:
var
aMaxDir : integer;
begin
aMaxDir := GetMaxDir('C:\foo\bar\'); // return 100
Это быстрый способ?
Можете ли вы изменить способ имен папок? Если вы можете изменить их для использования трех или четырех цифр (например, '001',' 002', '010',' 100'), вы можете просто отсортировать массив и затем захватить последний элемент. –
Перечисление каталогов - это стоимость здесь. Сортировка массива, предложенная @KenWhite, будет еще медленнее. Это будет O (n log n), но ваш поиск - O (n). Игнорирование возвращаемого значения «TryStrToInt» невелико. Не делай этого. Почему вы верите, что можете сделать лучше, чем это? Какова ваша целевая аудитория? Как долго это займет? Где файлы? Локальная или сеть? Являются единственными каталогами этой формы, или есть много других, не входящих в эту форму? –
@KenWhite no я не могу изменить имя каталогов – ar099968