0

NAV で日付順に並べられたディレクトリからファイルのリストを取得するにはどうすればよいですか? 日付のキーがないため、ファイル仮想テーブルを使用できません。DotNet を試してみましたが、IComparer インターフェイスの実装は複雑すぎます。

何か案は?

乾杯

4

2 に答える 2

0

そして、ファイルテーブルのキーの正確な問題は何ですか? 私が見る限り、日付と時刻の両方がソート可能です。Nav 2015でテスト済み。 仮想ファイル テーブルの並べ替え

とにかく、本当に .net でやりたいのなら、ここに例があります。ベーステーブルはFile. ページ プロパティSourceTableTemporary = Yes。すべてのファイル情報を配列に取得したら、それを使用して好きなように並べ替えることができます。または、一時ファイル テーブルに配列の値を入力し、setcurrentkey LOLを使用することもできます

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;
于 2015-12-24T09:38:03.033 に答える