본문 바로가기

문과 코린이의, [ASP] 기록

[문과 코린이의 IT 기록장] ASP 파일 - FileSystemObject(FSO) (FileSystemObject(FSO) 다루기, 드라이브 다루기, 파일 다루기, 파일 생성, 파일 쓰기, 파일 읽기)

반응형

[문과 코린이의 IT 기록장] ASP 파일 - FileSystemObject(FSO) (FileSystemObject(FSO) 다루기, 드라이브 다루기, 파일 다루기, 파일 생성, 파일 쓰기, 파일 읽기)

[문과 코린이의 IT 기록장] ASP 파일 - FileSystemObject(FSO) (FileSystemObject(FSO) 다루기, 드라이브 다루기, 파일 다루기, 파일 생성, 파일 쓰기, 파일 읽기)

 


2022.06.08 - [문과 코린이의, [ASP] 기록] - [문과 코린이의 IT 기록장] ASP Intro(기본적인 Web Browser - Web Server의 구조 , ASP가 추가된 Web Browser - Web Server의 구조 , html vs ASP , ASP 실행 방법 , 가상 디렉토리, 가상 디렉토리 내 ASP 파일 저장 및 ..

 

[문과 코린이의 IT 기록장] ASP Intro(기본적인 Web Browser - Web Server의 구조 , ASP가 추가된 Web Browser - W

[문과 코린이의 IT 기록장] ASP Intro(기본적인 Web Browser - Web Server의 구조 ,  ASP가 추가된 Web Browser - Web Server의 구조 , html vs ASP , ASP 실행 방법 , 가상 디..

vansoft1215.tistory.com

2022.06.09 - [문과 코린이의, [ASP] 기록] - [문과 코린이의 IT 기록장] ASP 기본 문법 (Now, Hour(), IF~THEN(조건문), ASP 선언 및 생성 / 논리 구문, ASP 데이터 타입, ASP 타입 변환 함수)

 

[문과 코린이의 IT 기록장] ASP 기본 문법 (Now, Hour(), IF~THEN(조건문), ASP 선언 및 생성 / 논리 구문, AS

[문과 코린이의 IT 기록장] ASP 기본 문법 (Now, Hour(), IF~THEN(조건문), ASP 선언 및 생성 / 논리 구문, ASP 데이터 타입, ASP 타입 변환 함수) 2022.06.08 - [문과 코린이의, [ASP]..

vansoft1215.tistory.com

2022.06.10 - [문과 코린이의, [ASP] 기록] - [문과 코린이의 IT 기록장] ASP 개체 모델 (사용자 정보 얻기 ( HTML FORM 태그 , ASP 페이지), ASP 개체 모델, Request 개체 종류, Server 개체 종류, Application 개체 종류)

 

[문과 코린이의 IT 기록장] ASP 개체 모델 (사용자 정보 얻기 ( HTML FORM 태그 , ASP 페이지), ASP 개체

[문과 코린이의 IT 기록장] ASP 개체 모델 (사용자 정보 얻기 ( HTML FORM 태그 , ASP 페이지), ASP 개체 모델, Request 개체  종류, Server 개체  종류, Application 개체  종류..

vansoft1215.tistory.com

 


1. FileSystemObject(FSO) 다루기

* Server개체 내, CreateObject 메소드 참고

 

[문과 코린이의 IT 기록장] ASP 개체 모델 (사용자 정보 얻기 ( HTML FORM 태그 , ASP 페이지), ASP 개체

[문과 코린이의 IT 기록장] ASP 개체 모델 (사용자 정보 얻기 ( HTML FORM 태그 , ASP 페이지), ASP 개체 모델, Request 개체  종류, Server 개체  종류, Application 개체  종류..

vansoft1215.tistory.com

- ASP 페이지는 그 자신만으로는 파일을 다룰 수가 없으며, 파일을 다루는 컴포넌트인 FileSystemObject의 도움을 받아서 파일을 제어할 수 있다. 그러나 FileSystemObejct나, ADO 같은 것은, ASP.DLL에 들어있지 않고 따로 제공되어 진다.

 

- 이와 같이 ASP 페이지에서 ASP.DLL에 포함되지 않은 외부에서 제공되는 객체들을 사용하려면, CreateObject 메소드로 그 객체의 인스턴스를 만드는 방법으로 사용이 가능하다.

- 따라서, 외부에서 제공되는 모든 객체는, 그 프로그램 ID만 알고 있다면 ASP 페이지에서 코드를 통해 해당 객체의 인스턴스를 만들 수 있고, 그 객체가 가진 모든 기능을 사용할 수 있게 된다.

 

 ex 1. Set adoCon = Server.CreateObject("ADODB.Connection")

// ADODB.Connection : ADO 커넥션 객체의 프로그램 id.

// 이후 adoCon이라는 객체변수를 사용하여, Connection 개체가 제공하는 모든 메소드와 속성(프로퍼티)을 사용할 수 있게 된다.

 

ex 2. Set oFSO = Server.CreateObject("Scripting.FileSystemObject")

// Scripting.FileSystemObject: 파일 시스템 포브잭트 객체의 프로그램 id

// 이후 ofFO라는 객체변수를 사용해, FileSystemObejct 개체가 제공하는 모든 메소드와 속성(프로퍼티)을 사용할 수 있게 된다. 

 


1) FileSystemObject(FSO) 역할

웹 상 서버측에서 파일관련 처리는, FileSystemObject(FSO)스크립트 객체가 거의 해결해 주고 있다.

 

이 객체를 사용하면 얻을 수 있는 것?

- 웹 상에서, 동적으로 디렉토리 생성 / 디렉토리 삭제 / txt파일 생성 / txt파일 편집 / txt파일 삭제 등이 가능하다.

- 그러나 이 객체는, 서버에서 동작하는 것이지, 클라이언트를 제어하는 것은 아니다. 즉 클라이언트 시스템의 파일을 지우고 생성할 수 있다는 것이 아니다.


2) FileSystemObject(FSO) 사용 방법

(1) 생성

- Server객체의 CreateObject 메서드를 사용해, FileSystemObject 객체의 인스턴스를 만들고, 관련 적절한 메서드를 사용한다.

 * 이 개체는 외부에서 제공되는 것이기에, 반드시 개체 인스턴스를 ASP 페이지에서 생성해서 사용해야 한다.

 

(2) 메서드

- FSO를 사용하면 새로운 txt파일이나 폴더를, CreateTextFile이나 CreateFolder를 사용하여 만들 수가 있다.

- 만들어진 파일 및 폴더를 삭제하려면, DeleteFile메서드DeleteFolder메서드 또는, File개체와 Folder개체의 Delete 메소드를 사용해 삭제할 수 있다.

- 기존 드라이브, 파일, 폴더에 액세스하려면, "GET"메서드를 사용해 가능하다. ex. GetDrive, GetFolder, GetFile

 


2. FileSystemObject(FSO) - 드라이브 다루기

ex. 루트 드라이브(C:)의 잔여용량을 보여주는 예제

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set Cdrive = fs.GetDrive("c:")
%>
<HTML>
<head>
	<meta charset = "UTF-8">
</head>
<BODY>
	<br><center><font face="돋움" size="2">
	<h2>FileSystemObject Ex1</h2><br>
	C드라이브의 남은 공간 : <%=Cdrive.freespace%> bytes
	</font></center>
</BODY>
</HTML

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
// CreateObject를 통해 객체의 인스턴스를 만들어 사용함. (fs라는 이름으로 모든 메소드를 사용할 수 있음)

 

Set Cdrive = fs.GetDrive("c:")
// C드라이브의 핸들을 얻어오기 위해, GetDrive메소드를 사용함.
// 이후, Cdrive라는 이름으로, 해당 드라이브의 여러 정보를 얻어올 수 있게 됨.

 * 핸들(Handle) : 그래픽 사용자 인터페이스(GUI)를 제공하고 있는 컴퓨터 환경에서, 파일 / 윈도우 / 대화상자 등과 같은 자원을 접근하기 위해 사용되는 숫자. 이 숫자는 이름 혹은 자원의 ID를 의미하며, 핸들을 얻어옴으로써 그 자원을 제어할 수 있다.

%>

 

<% =Cdrive.freespace %> 

// Drive객체의 속성인 freespace를 통해 드라이브의 잔여용량을 체크했다.

 

[ Drive 개체의 속성 ]

AvailableSpace 지정한 드라이브나 네트워크 공유에서 사용할 수 있는 디스크 공간의 크기를 반환
DriveLetter 실제의 로컬 드라이브나 네트워크 공유의 드라이브 문자를 반환
FileSystem 드라이브에서 사용하는 파일 시스템의 형식을 반환(FAT, NTFS 및 CDFS)
FreeSpace 지정한 드라이브나 네트워크 공유에서 사용할 수 있는 빈 공간 크기를 반환
IsReady 지정한 드라이브가 준비되었으면 True를, 그렇지 않으면 False를 반환
Path 지정한 파일, 폴더 또는 드라이브의 경로를 반환
RootFolder 지정한 드라이브의 루트 폴더를 나타내는 Folder 개체를 반환
SerialNumber 디스크 볼륨을 고유하게 식별하는 데 사용하는 십진 일련 번호를 반환
ShareName 지정한 드라이브의 네트워크 공유 이름을 반환
TotalSize 드라이브나 네트워크 공유의 전체 공간을 바이트 단위로 반환
VolumeName 지정한 드라이브의 볼륨 이름을 지정하거나 반환

 


3. FileSystemObject(FSO) - 파일 다루기

ex. 지정한 파일의 객체를 얻어온 후, 그 파일의 여러가지 정보를 가져오는 과정

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set myfile = fs.GetFile("c:\다운로드.jpg") // 내 C드라이브에 있는 파일 기입
%>

<HTML>
<head>
	<meta charset = "UTF-8">
</head>

<BODY>
	<br><center><font face="돋움" size="2">
	<h2>FileSystemObject 예제</h2>
	Config.sys 화일의 정보<p>
	file size : <%=myfile.size%> bytes<br>
	file type : <%=myfile.type%><br>
	file path : <%=myfile.path%>
	</font></center>
</BODY>
</HTML>

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")

// CreateObject를 통해 객체의 인스턴스를 만들어 사용함. (fs라는 이름으로 모든 메소드를 사용할 수 있음)


Set myfile = fs.GetFile("c:\다운로드.jpg") 

//  Getfile메소드를 통해, 지정된 파일의 핸들을 가져오고 있다.

// Getfile메소드 내에는 파일의 물리적인 경로를 확실하게 기입해줘야 한다. 만일 존재하지 않는 파일을 기입했다면, 에러 메시지를 만나게 된다.

%>

 

 

[ File 개체의 속성]

Size 파일의 사이즈를 얻어옵니다.
Type 파일의 타입을 얻어옵니다.
Path 파일의 경로를 반환한다
ShortName 파일의 이름를 8.3규칙으로 반환한다
ShortPath 파일의 경로를 8.3규칙으로 반환한다
ParentFolder 파일의 상위 폴더를 얻어옵니다.
Name 파일의 이름을 얻어옵니다
Drive 파일이 위치하는 드라이브명을 얻어옵니다
DateCreated 파일이 만들어진 날짜와 시간을 얻어옵니다
DateLastAccessed 파일이 마지막으로 억세스된 날짜,시간을 반환
DateLastModified 파일이 마지막으로 수정된 날짜,시간을 반환

 


4. FileSystemObject(FSO) - 파일 생성

- CreateTextFile 메소드 : 하드상 어떤 폴더에라도, txt파일 (html파일 / asp파일)을 만들 수 있다.

 * 그러나, 바이너리 파일은 만들 수 없다.

 

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile "c:\MyTest\test.txt",true
// C드라이브에 MyTest폴더가 존재해야 함. 
%>

<HTML>
<head>
	<meta charset = "UTF-8">
</head>
<BODY>
	<br><center><font face="돋움" size="2">
	<h2>FSO 텍스트화일 만들기</h2>
	<%
	if fs.FileExists("c:\MyTest\test.txt") then
	   Response.write "결과 : test.txt화일이 만들어 졌습니다."
	else
	   Response.write "결과 : test.txt화일이 만들어지지 못했습니다."
	end if
	%>	
	</font></center>
</BODY>
</HTML>

FSO의 CreateTextFile메소드를 이용해 서버 폴더에 txt파일을 만들거나 삭제할 경우, 가장 먼저 설정해줘야 할 작업이 있다.

- 파일을 생성, 삭제, 편집하고자 할 경우, 그렇게 파일을 다룰 해당 티렉토리의 파일을, 새로 생성, 쓰기 할 수 있는 권한을 주어야 한다는 것이다.

- 해당 디렉토리에 파일 생성 및 쓰기 권한을 가지고 있지 않다면, 기본적으로 에러를 만나게 됨.

 

fs.CreateTextFile "c:\MyTest\test.txt",true

// 첫 번째 인자 : 어느 경로에 어떤 이름의 텍스트 파일을 만들 것인지, 전체 경로를 기입한다.

// 두 번째 인자 : 같은 이름의 파일이 이미 존재할 경우, 그를 덮어쓸지 덮어쓰지 못하게 할 것인지를 지정한다.

 * true : 덮어쓰기 가능 / false : 덮어쓰기 불가능 (  생략시 자동 true 설정 )

// 세 번째 인자 : 파일이 만들어질 때 유니코드로 만들어지게 할 것인가, ASCII파일로 생성되게 할 것인가를 결정한다.

 * true면 유니코드로, false면 ASCII코드로 생성 (생략시 ASCII로 생성된다)

 


5. FileSystemObject(FSO) - 파일 쓰기

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set objFile = fs.OpenTextFile("c:\MyTest\test.txt",8)
%>

<HTML>
<head>
	<meta charset = "UTF-8">
</head>
<BODY>
	<br><center><font face="돋움" size="2">
	<h2>FSO 텍스트화일에 쓰기</h2>
	<%
	objFile.writeLine("이것은 글쓰기 테스트입니다.")
	objFile.writeLine("이 글은 두번째 라인에 쓰여집니다.")
	objFile.writeLine("이 글은 세번째 라인에 쓰여집니다.")
	objFile.close
	%>
	글쓰기 완료!!
	</font></center></BODY>
</HTML>

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
// CreateObject를 통해, FileSystemObject 객체의 인스턴스를 만들어 사용함 
// fs라는 이름으로 모든 메소드를 사용 가능


Set objFile = fs.OpenTextFile("c:\MyTest\test.txt",8)
// OpenTextFile 메소드 : 파일을 열고 그 파일을 액세스 하는 기능을 가짐

 * cf. CreateTextFile 메소드 : 파일을 생성하고 그 파일을 액세스하는 기능을 가짐.

 

// 이 메소드로 특정 파일을 읽어들이면, 이 파일에 대한 TextStream 객체를 생성하게 된다. 긜고 그 객체를 가지고 지정한 파일을 제어할 수 있다.

// 즉, OpenTextFile메서드를 사용하게 되면, 그 리턴값으로 지정한 파일(test.txt)의 TextStream 객체를 생성하게 되고, 이것을 objFile이라는 이름에 저장하게 된 것.

%>

 

.

.

.

 

<%
objFile.writeLine("이것은 글쓰기 테스트입니다.") // objFile에 글쓰기 가능. (WriteLine : 글쓰기 + Enter)
objFile.writeLine("이 글은 두번째 라인에 쓰여집니다.")
objFile.writeLine("이 글은 세번째 라인에 쓰여집니다.")
objFile.close // 파일의 작업이 끝났다면, close메소드를 통해 무조건 닫아줘야 함. (서버가 파일을 계속 오픈하고 있다면 다른 사용자가 그 파일을 접근하지 못할 수 있기 때문)
%>

 


OpenTextFile ( a , [ b ], [ c ], [ d ] )

 * a는 필수이고, 나머지는 선택적으로 기입한다.

a. 파일의 전체 경로 

 

b. 파일 열때 읽기전용 | 쓰기전용 | 읽고쓰기 가능

- 읽기전용 : ForReading(1) * 디폴트값

- 쓰기전용 : ForWriting (2)

- 읽고쓰기 가능 : ForAppending (8)

 

c. 지정된 파일이 존재하지 않을 경우, 파일을 새롭게 만들것인가

- true : 파일이 없을 경우, 새로운 파일을 만들면서 Open하기를 원하는 경우 * 디폴트 값

- false : 반드시 파일이 있어야만, Open이 가능하다. ( 파일이 기존에 없다면 오류 발생 )

 

d. 파일의 포멧을 저장하는 인자

-1 : 유니코드 포맷

0 : ASCII 포맷

-2 : System의 디폴트 format

 

 


6. FileSystemObject(FSO) - 파일 읽기

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set objFile = fs.OpenTextFile("c:\MyTest\test.txt",1)
%>

<HTML>
<head>
	<meta charset="UTF-8">
</head>

<BODY>
	<br><center><font face="돋움" size="2">
	<h2>FSO 텍스트화일 읽기</h2>
	<%
	Do While objFile.AtEndOfStream <> True
	    Response.write objFile.readLine & "<br>"
	loop
	' 이런 방법도 같은 결과를 출력한다.(ReadAll 사용)
	' content = objFile.readall
	' str = replace(content,chr(13)&chr(10),"<br>")
	' Response.write str
	%>
	</font></center></BODY>
</HTML>

 

<%
Set fs = Server.CreateObject("Scripting.FileSystemObject")

// CreateObject를 통해, FileSystemObject 객체의 인스턴스를 만들어 사용함 
// fs라는 이름으로 모든 메소드를 사용 가능


Set objFile = fs.OpenTextFile("c:\MyTest\test.txt",1) // OpenTextFile 메소드의 두번째 인자가 읽기전용(1)로 세팅됨

// OpenTextFile 메소드 : 파일을 열고 그 파일을 액세스 하는 기능을 가짐

 * cf. CreateTextFile 메소드 : 파일을 생성하고 그 파일을 액세스하는 기능을 가짐.

%>

 

.

.

.

 

<%
Do While objFile.AtEndOfStream <> True

// AtEndOfStream, AtEndOfLine, Read 메소드 등은, 읽고쓰기(ForAppending - 8)로 설정하면 오류를 발생시킴. 읽기전용(ForReading - 1)에서만 동작 가능.

 

// AtEndOfStream : TextStream속성 중 하나.

- 현재 위치가 파일의 끝인지를 나타내주는 속성.

- 파일의 끝에 다다르면 True / 끝이 아니면 False를 리턴함.

// 즉 파일이 끝이 다다를 때까지, 반복문 진행

 

    Response.write objFile.readLine & "<br>"

// Readline : 파일에서 데이터를 라인 단위로 가져와라.
loop

 


' 이런 방법도 같은 결과를 출력한다.(ReadAll 사용)
' content = objFile.readall // 한 번에 모든 텍스트를 불러오기
' str = replace(content,chr(13)&chr(10),"<br>") //chr(13), chr(10)는 엔터키 => 즉 전체 텍스트 중 이들을 <br>로 바꿔라
' Response.write str
%>

 

속성 설명
write(문자열) 파일에 문자열을 입력
WriteLine(문자열) 파일에 문자열과 엔터값(라인문자)을 입력
WriteBlankLines(i) 파일에 i 개의 엔터값(라인문자)을 입력
Read(i) 파일에서 i 개의 문자만을 읽어온다
ReadLine 파일에서 한 라인을 읽어온다
ReadAll 파일에서 모든 텍스트를 읽어온다
Skip(i) 파일에서 i 개 만큼 문자를 건너뛴다
SkipLine 파일에서 읽어올 때 라인하나를 건너뛴다

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형