Список файлов из каталога, упорядоченный по дате

Как я могу получить список файлов из каталога, упорядоченного по дате в NAV? Я не могу использовать виртуальную таблицу File, потому что нет ключа для даты. Я пытался с DotNet, но реализация интерфейса IComparer слишком сложна для меня.

Есть идеи?

ура

2 ответа

Решение

Как низкотехнологичное решение (т.е. не требующее каких-либо внешних компонентов), как насчет создания временной переменной File file, в которой вы буферизуете записи файла, заполняя поле Path сортируемым строковым представлением полей Date и Time файла, объединенных в DateTime? [Пожалуйста, игнорируйте этот PAGE.RUN - он был там только для целей отладки.]

Код

На моей машине первый вызов ShowFileOrder отображает это:

Отсортировано по имени

Второй звонок показывает это:

И вот как файлы выглядят в проводнике Windows:

Надеюсь, это поможет!:)

А что именно не так с ключом таблицы файлов? Насколько я вижу, дата и время сортируются. Проверено в Nav 2015. Сортировка виртуальной таблицы файлов

Во всяком случае, если вы действительно хотите сделать это с.net вот пример. Базовая таблица File, Свойство страницы SourceTableTemporary = Yes, После того, как вы получите всю информацию о файле в arrey, вы можете использовать ее и сортировать так, как вам нравится. Или вы можете заполнить таблицу временных файлов значениями из массива и использоватьsetcurrentkey лол

di  DotNet  System.IO.DirectoryInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
fi  DotNet  System.IO.FileSystemInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
arr DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
i   Integer     

di := di.DirectoryInfo('c:\Temp\Tmp');
//arr.CreateInstance(GETDOTNETTYPE(fi),1); //not needed
arr := di.GetFileSystemInfos();
for i := 0 to arr.Length-1 do
 begin
  fi := arr.GetValue(i);
  Name := fi.Name;
  evaluate(Date, format(fi.LastWriteTime,8,1));
  insert;
 end;

Чтение списка файлов

Или вы можете даже отсортировать список файлов с помощью .Net

di  DotNet  System.IO.DirectoryInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
fi  DotNet  System.IO.FileSystemInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
arr DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
arrKey  DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
i   Integer     
TYPE    DotNet  System.Type.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
MethodInfo  DotNet  System.Reflection.MethodInfo.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
Parameters  DotNet  System.Array.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'  
Object  DotNet  System.Object.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

di := di.DirectoryInfo('c:\Temp\Tmp');
arr := di.GetFileSystemInfos();
fi := arr.GetValue(0);
arrKey := arrKey.CreateInstance(GETDOTNETTYPE(fi.LastWriteTime), arr.Length);
FOR i := 0 TO arr.Length-1 DO
 BEGIN
  fi := arr.GetValue(i);
  arrKey.SetValue(fi.LastWriteTime, i);
 END;

TYPE := GETDOTNETTYPE(arr);
MethodInfo := TYPE.GetMethods().GetValue(80);
Parameters := Parameters.CreateInstance(GETDOTNETTYPE(Object),2);
Parameters.SetValue(arrKey,0);
Parameters.SetValue(arr,1);
MethodInfo.Invoke(TYPE, Parameters);

FOR i := 0 TO arr.Length-1 DO
 BEGIN
  fi := arr.GetValue(i);
  MESSAGE(FORMAT(fi.LastWriteTime()));
 END;
Другие вопросы по тегам