^(코딩캣)^ = @"코딩"하는 고양이;

[Classic ASP] SubFolders, Files : 로컬 내 파일과 폴더 목록 얻기

Common Gateway Interface/ASP & ASP.NET
2023. 3. 19. 08:41

서버 내 로컬 경로에서 파일과 폴더는 다음과 같이 얻을 수 있다.

 

Scripting.FileSystemObject 객체 할당 및 해제

Scripting.FileSystemObject 객체는 컴퓨터(서버) 내 파일 시스템에 접근할 수 있는 메소드들을 제공하는 객체이다(출처: https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/filesystemobject-object).

<%
 Set fileSystemObject = Server.CreateObject("Scripting.FileSystemObject")
 ' ... '
 Set fileSystemObject = Nothing
 %>

 

GetFolder 메소드로 폴더에 대한 객체 얻기

[Scripting.FileSystemObject].GetFolder 메소드는 폴더를 특정하는 경로를 받아서 이에 대한 객체를 반환한다.

<%
 Set fileSystemObject = Server.CreateObject("Scripting.FileSystemObject")
 Set folder           = fileSystemObject.GetFolder(경로)
 ' ... '
 Set folder           = Nothing
 Set fileSystemObject = Nothing
 %>

 

이 때, 경로는 하드코딩도 되겠으나, Server.MapPath 메소드를 조합하면 다음과 같이 ASP 파일이 위치한 로컬 경로를 기준으로 한 상대 경로도 가능하다.

<%
 Set fileSystemObject = Server.CreateObject("Scripting.FileSystemObject")
 Set folder           = fileSystemObject.GetFolder(Server.MapPath("."))
 ' ... '
 Set folder           = Nothing
 Set fileSystemObject = Nothing
 %>

 

현재 지정된 폴더의 절대 경로 얻기

위와 같이 얻은 폴더 객체의 절대 경로는 다음과 같이 Path 프로퍼티로 구할 수 있다.

<%=folder.Path%>

 

현재 지정된 폴더 속 하위 폴더의 개수

위와 같이 얻은 폴더 객체에서 하위 폴더가 몇 개인지를 알기 위해 다음과 같이 SubFolders.Count 프로퍼티를 사용할 수 있다.

<%=folder.SubFolders.Count%>

 

현재 지정된 폴더 속 파일의 개수

위와 같이 얻은 폴더 객체에서 파일이 몇 개인지를 알기 위해 다음과 같이 SubFolders.Count 프로퍼티를 사용할 수 있다.

<%=folder.Files.Count%>

 

폴더 속 폴더를 하나씩 순회하기

SubFolders 프로퍼티는 그 자체가 Collection 객체이기도 하므로 다음과 같이 For Each 루프를 돌려서 하위 폴더들을 하나씩 순회할 수 있다.

<%
 Set fileSystemObject = Server.CreateObject("Scripting.FileSystemObject")
 Set folder           = fileSystemObject.GetFolder(Server.MapPath("."))
 
 For Each f in folder.SubFolders ' f is also Folder object
 	' ... '
 Next
 
 Set folder           = Nothing
 Set fileSystemObject = Nothing
 %>

 

폴더 속 파일을 하나씩 순회하기

마찬가지로 Files 프로퍼티도 그 자체가 Collection 객체이기도 하므로 다음과 같이 For Each 루프를 돌려서 폴더 속 파일들을 하나씩 순회할 수 있다.

<%
 Set fileSystemObject = Server.CreateObject("Scripting.FileSystemObject")
 Set folder           = fileSystemObject.GetFolder(Server.MapPath("."))
 
 For Each f in folder.Files ' f is File object
 	' ... '
 Next
 
 Set folder           = Nothing
 Set fileSystemObject = Nothing
 %>

 

서버 로컬 경로 내 파일 및 폴더 순회 예

다음은 asp 파일 자신이 위치한 폴더 내 파일과 하위 폴더들을 순회하여 클라이언트에게 보여주는 예이다.

<%@ language="VBScript" codepage="65001" %>
<%
 Session.CodePage = "65001"
 Response.ContentType = "text/html"
 Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
 Response.Charset = "UTF-8"
 %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<title>codingCat.kr</title>
		<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
	</head>
	<body>
		<%
		 fileSystemPath = Server.MapPath(".")
		 
		 Dim fileSystemObject
		 Dim fileSystemFolder
		 
		 Set fileSystemObject = Server.CreateObject("Scripting.FileSystemObject")
		 Set fileSystemFolder = fileSystemObject.GetFolder(fileSystemPath)
		 %>
		<p>Local Path: <code><%=fileSystemFolder.Path%></code></p>
		<p>FOLDER(S): <code><%=fileSystemFolder.SubFolders.Count%></code> item(s).</p>
		<ul>
			<% For Each f in fileSystemFolder.SubFolders %><li>[<%=f.Name%>]</li><% Next %>
		</ul>
		<p>FILE(S): <code><%=fileSystemFolder.Files.Count%></code> item(s).</p>
		<ul>
			<% For Each f in fileSystemFolder.Files %><li><%=f.Name%></li><% Next %>
		</ul>
		<%
		 Set fileSystemFolder = Nothing
		 Set fileSystemObject = Nothing
		 %>
	</body>
</html>

카테고리 “Common Gateway Interface/ASP & ASP.NET”
more...