본문 바로가기

프로그램&DB/ASP

ASP에서 서버의 디렉토리를 재귀적으로 자동생성하는 함수 by 채윤이님

Scripting.FileSystemObject 객체를 이용하여 서버의 파일 및 폴더를 마음대로 주무를 수 있습니다. 특정 경로를 새로 만들때는 FSO의 CreateFolder 프로시저를 이용하게 되는데, 문제는 이 메소드가 하나의 폴더만 만들 수만 있다는 점입니다.

예를 들면, "C:\Temp\Web\Upload\2010\02\10" 식의 디렉토리에 임시 폴더를 생성하려 한다면, CreateFolder 메소드로는 바로 오류가 발생하게 됩니다. 차례 차례 경로를 들어가면서 해당 디렉토리가 없으면 하나씩
생성해 주어야 되죠. 이를 테면 다음과 같이 만들어야 겠죠.

       

        If not objFSO.FolderExists("C:\Temp") then
Call objFSO.CreateFolder(("C:\Temp")
End if
If not objFSO.FolderExists("C:\Temp\Web") then
Call objFSO.CreateFolder("C:\Temp\Web")
End if
If not objFSO.FolderExists("C:\Temp\Web\Upload") then
Call objFSO.CreateFolder("C:\Temp\Web\Upload")
End if
If not objFSO.FolderExists("C:\Temp\Web\Upload2010") then
Call objFSO.CreateFolder("C:\Temp\Web\Upload2010")
End if
If not objFSO.FolderExists("C:\Temp\Web\Upload2010\02") then
Call objFSO.CreateFolder("C:\Temp\Web\Upload2010\02")
End if
If not objFSO.FolderExists("C:\Temp\Web\Upload2010\02\10") then
Call objFSO.CreateFolder("C:\Temp\Web\Upload2010\02\10")
End if

 

위와 같이 해주어야 "C:\Temp\Web\Upload\2010\02\10" 폴더가 원하는 형태로 생성이 됩니다. 하지만 경로가 날짜에 따라서 바뀌므로, 위와 같은 하드 코딩으로는 불가능하죠. 이를 다음과 같은 재귀함수를 사용하면 손쉽게 해결이 됩니다.

 
       '* @info Generate a folder tree from the path
'*
	If not objFSO.FolderExists("C:\Temp") then
		Call objFSO.CreateFolder(("C:\Temp")
	End if
	If not objFSO.FolderExists("C:\Temp\Web") then
		Call objFSO.CreateFolder("C:\Temp\Web")
	End if
	If not objFSO.FolderExists("C:\Temp\Web\Upload") then
		Call objFSO.CreateFolder("C:\Temp\Web\Upload")
	End if
	If not objFSO.FolderExists("C:\Temp\Web\Upload2010") then
		Call objFSO.CreateFolder("C:\Temp\Web\Upload2010")
	End if
	If not objFSO.FolderExists("C:\Temp\Web\Upload2010\02") then
		Call objFSO.CreateFolder("C:\Temp\Web\Upload2010\02")
	End if
	If not objFSO.FolderExists("C:\Temp\Web\Upload2010\02\10") then
		Call objFSO.CreateFolder("C:\Temp\Web\Upload2010\02\10")
	End if

 

재귀함수를 이용하면 정말 간편하게 작업할 수 있습니다. 위 함수를 공통으로 사용하는 파일에 포함시켜 놓으면 유용하게 사용하실 수 있습니다.

[출처] http://hbesthee.tistory.com/archive/201002