FILESYSTEMOBJECT オブジェクトを使用してディレクトリ内のファイルのリストを取得するとき、名前による並べ替え、拡張子による並べ替え、ファイル サイズによる並べ替えなど、ファイルの並べ替え方法を制御できないことに気づきましたか。配列を使用して順番に並べます。
名前で並べ替えたい場合は非常に簡単ですが、ファイルサイズやファイルの作成時間などで並べ替えたい場合は少し面倒になります。これは 2D 配列を介して実行します。
次のコードは、クリックして並べ替え、2 回クリックして逆に並べ替えることによって目的を達成する方法を示しています。
<HTML> <頭> <TITLE>ファイルの並べ替えのデモンストレーション</TITLE> </HEAD> <本体> <% 'デモディレクトリを設定します:) 定数ディレクトリ = / ' 定数を使用してソート方法を定義します CONST FILE_NAME = 0 '名前で並べ替え...など CONST FILE_EXT = 1 CONST ファイルタイプ = 2 CONST FILE_SIZE = 3 CONST FILE_CREATED = 4 CONST FILE_MODIFIED = 5 CONST FILE_ACCESSED = 6 '並べ替えコマンドを取得します。デフォルトは名前による並べ替えです req = リクエスト(sortBy) Len(req) < 1 の場合、sortBy = 0、そうでない場合、sortBy = CInt(req) req = リクエスト(事前ソート) Len(req) < 1 の場合、priorSort = -1、そうでない場合、priorSort = CInt(req) '逆の順序を設定 sortBy = prioritySort の場合 逆 = 真 事前ソート = -1 それ以外 逆 = 偽 事前ソート = 並べ替え順 終了の場合 ' 次に、実際のコードを開始します。 。 。 パス = Server.MapPath(DIRECTORY) fso = CreateObject(Scripting.FileSystemObject) を設定します。 現在のフォルダー = fso.GetFolder(パス) を設定します。 curFiles = theCurrentFolder.Files を設定します。 'これらのファイルをループします ファイルを暗くする() ReDim theFiles(500) ' ランダムなサイズを設定しました currentSlot = -1 ' 最初のスロットの前から開始 'ファイルの関連情報をすべて配列に入れます curFiles の各 fileItem について fname = ファイル項目.名前 fext = InStrRev(fname, .) fext < 1 の場合 fext = Else fext = Mid(fname,fext+1) ftype = fileItem.Type fsize = fileItem.Size fcreate = fileItem.DateCreated fmod = fileItem.DateLastModified faccess = fileItem.DateLastAccessed 現在のスロット = 現在のスロット + 1 現在のスロット > UBound(ファイル) の場合 ReDim ファイルを保存(現在のスロット + 99) 終了の場合 'それを配列に入れます theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess) 次 ' すべてが配列内にあるので、次のステップを開始します fileCount = currentSlot 'ファイルの数 ReDim ファイルを保存(現在のスロット) ' 選別 ' (8は文字列を意味します) VarType(theFiles(0)(sortBy)) = 8 の場合 If reverse then kind = 1 Else kind = 2 ' 文字を並べ替えます それ以外 逆の場合は、種類 = 3、そうでない場合、種類 = 4 '数値、時間。 。 。 終了の場合 For i = fileCount TO 0 ステップ -1 minmax = theFiles(0)(sortBy) minmaxスロット = 0 j = 1 の場合 i ケースの種類を選択してください ケース1 マーク = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) < 0) ケース2 マーク = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) > 0) ケース3 マーク = (theFiles(j)(sortBy) < minmax) ケース4 マーク = (theFiles(j)(sortBy) > minmax) エンドセレクト マークが付いている場合は、 minmax = theFiles(j)(sortBy) minmaxスロット = j 終了の場合 次 if minmaxSlot <> i then temp = theFiles(minmaxSlot) theFiles(minmaxSlot) = theFiles(i) theFiles(i) = 一時 終了の場合 次 ' 仕上げる %> <フォーム名=doSort メソッド=Get> <INPUT タイプ=非表示名=priorSort 値=<% = PriorSort %>> <入力タイプ=非表示名=並べ替え値=-1> </FORM> <SCRIPT 言語=JavaScript> 関数reSort(どれ) { document.doSort.sortBy.value = どれ; document.doSort.submit(); } </スクリプト> <センター> <FONT Size=+2> このディレクトリ <% = path %> 内の <% = (fileCount+1) %> ファイルを表示します </FONT> <P> [並べ替え] をクリックし、もう一度 [逆順並べ替え] をクリックします。 <P> <TABLE Border=1 CellPadding=3> <TR> <TH><A HREF=javascript:reSort(0);>ファイル名</A></TH> <TH><A HREF=javascript:reSort(1);>拡張機能</A></TH> <TH><A HREF=javascript:reSort(2);>タイプ</A></TH> <TH><A HREF=javascript:reSort(3);>サイズ</A></TH> <TH><A HREF=javascript:reSort(4);>作成時間</A></TH> <TH><A HREF=javascript:reSort(5);>最終変更時刻</A></TH> <TH><A HREF=javascript:reSort(6);>最終アクセス時刻</A></TH> </TR> <% i = 0 の場合 fileCount まで Response.Write <TR> & vbNewLine j = 0 の場合、UBound(theFiles(i)) へ Response.Write <TD> & theFiles(i)(j) & </TD> & vbNewLine 次 Response.Write </TR> & vbNewLine 次 %> </テーブル> </BODY> </HTML> |