FILESYSTEMOBJECT 개체를 사용하여 디렉터리의 파일 목록을 얻을 때 이름별 정렬, 확장자별 정렬, 파일 크기별 정렬 등 파일이 정렬되는 방식을 제어할 수 없다는 사실을 발견한 적이 있습니까? 배열을 사용하여 순서대로 정렬합니다.
이름순으로 정렬하려면 아주 간단하겠지만, 파일 크기나 파일 생성 시간 등으로 정렬하려면 조금 번거로울 것입니다. 우리는 2D 배열을 통해 이를 수행할 것입니다.
다음 코드는 선택 및 정렬을 통해 목표를 달성하는 방법을 보여줍니다. 정렬하려면 클릭하고 역순으로 정렬하려면 두 번 클릭하세요.
<HTML> <헤드> <TITLE>파일 정렬 시연</TITLE> </HEAD> <본문> <% '데모 디렉터리를 설정하세요. :) CONST 디렉토리 = / ' 상수를 사용하여 정렬 방법을 정의합니다. CONST FILE_NAME = 0 '이름으로 정렬...등등 CONST FILE_EXT = 1 CONST FILE_TYPE = 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 = 요청(priorSort) Len(req) < 1이면 beforeSort = -1 그렇지 않으면 beforeSort = CInt(req) '역순으로 설정 sortBy = beforeSort인 경우 반대 = 사실 사전 정렬 = -1 또 다른 역=거짓 사전정렬 = sortBy 종료 조건 ' 다음으로 실제 코드를 시작합니다. . . 경로 = Server.MapPath(디렉토리) fso = CreateObject(Scripting.FileSystemObject) 설정 현재 폴더 설정 = fso.GetFolder(경로) curFiles = theCurrentFolder.Files 설정 '이 파일에 대해 루프를 만듭니다. 파일을 흐리게() ReDim theFiles(500) ' 임의의 크기를 설정했습니다. currentSlot = -1 ' 첫 번째 슬롯 앞에서 시작 '파일의 모든 관련 정보를 배열에 넣습니다. curFiles의 각 파일 항목에 대해 fname = 파일항목.이름 fext = InStrRev(fname, .) fext < 1이면 fext = Else fext = Mid(fname,fext+1) ftype = 파일항목.유형 fsize = 파일항목.크기 fcreate = fileItem.DateCreated fmod = fileItem.DateLastModified faccess = fileItem.DateLastAccessed currentSlot = currentSlot + 1 currentSlot > UBound(theFiles)이면 ReDim 보존 파일(현재 슬롯 + 99) 종료 조건 '배열에 넣어라 theFiles(currentSlot) = 배열(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 '숫자, 시간. . . 종료 조건 i = fileCount TO 0의 경우 -1단계 최소최대 = theFiles(0)(sortBy) minmaxSlot = 0 j = 1인 경우 i 케이스 종류 선택 사례 1 표시 = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) < 0) 사례 2 표시 = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) > 0) 사례 3 표시 = (theFiles(j)(sortBy) < 최소최대) 사례 4 표시 = (theFiles(j)(sortBy) > 최소최대) 선택 종료 표시하면 다음 최소최대 = theFiles(j)(sortBy) minmaxSlot = j 종료 조건 다음 minmaxSlot <> i인 경우 그러면 임시 = theFiles(minmaxSlot) theFiles(minmaxSlot) = theFiles(i) theFiles(i) = 임시 종료 조건 다음 ' 마치다 %> <FORM 이름=doSort 메서드=Get> <입력 유형=숨겨진 이름=priorSort 값=<% =priorSort %>> <입력 유형=숨겨진 이름=sortBy 값=-1> </FORM> <SCRIPT 언어=자바스크립트> 함수 reSort(어떤) { document.doSort.sortBy.value = 어느; document.doSort.submit(); } </SCRIPT> <중앙> <폰트 크기=+2> 이 디렉터리 <% = 경로 %>에 있는 <% = (fileCount+1) %> 파일을 표시합니다. </FONT> <피> 정렬을 클릭하고 다시 역정렬을 클릭하세요. <피> <표 테두리=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로 응답.쓰기 <TR> 및 vbNewLine j = 0인 경우 UBound(theFiles(i))로 Response.Write <TD> & theFiles(i)(j) & </TD> & vbNewLine 다음 응답.쓰기 </TR> 및 vbNewLine 다음 %> </TABLE> </BODY> </HTML> |