새로운 텍스트 파일을 생성할때 CreateTextFile 메서드를 이용
이 메서드는 TextStream 객체를 리턴하며, 이 객체를 통해서 파일을 읽거나 쓸 수 있다.
옵션을 줄 수 있는데, 기존의 파일을 덮어 쓸 것인지 지정할 수 있다.
FileSystemObject.CreateTextFile [파일이름], [덮어쓰기], [유니코드]
[파일이름] : 생성하고자 하는 디렉토리와 파일 이름을 지정한다.
보통은 파일 이름만 지정하고 파일을 생성해도 별 지장은 없다.
[덮어쓰기] : 기존 파일(동일한 이름의 파일)을 덮어쓸 것인지를 지정한다.
true 값을 주면 기존 파일을 덮어쓰고, false 값이면 파일을 생성하지 않는다.
기본값은 true 인데, 만약 false 로 지정하였는데, 기존파일이 있다면 에러가 발생한다.
[유니코드] : 유니코드를 사용하는 파일로 만들 것인지 지정하는 것이다.
기본은 ASCII 파일로 생성한다.
<%
'객체 생성
set fs = CreateObject("Scripting.FileSystemObject")
'TextStream 객체 생성
set file = fs.CreateTextFile("C:\test.txt")
%>
----------------------------------------------------------
< OpenTextFile 메서드 >
기존의 텍스트 파일을 열려면 OpenTextFile 메서드를 이용한다.
이 메서드 역시 TextStream 객체를 리턴하며, 파일로부터 텍스트를 읽거나 쓸 수 있다.
FileSystemObject.OpenTextFile [파일이름], [파일속성], [생성여부], [포맷]
[파일속성] : 파일을 열때 어떤 모드로 열 것인지를 지정하는 것이다.
읽기/쓰기 모드를 지정하며, 기본값은 읽기만 된다.
[생성여부] : 파일이 없는 경우에도 파일을 생성하려면 여기에 true 값을 준다.
디폴트 값은 파일을 생성하지 않는다.
[포맷] : 기본 파일 포맷은 ASCII 이지만, -1 로 지정하면 유니코드(Unicode) 파일 포맷으로 열 수 있다.
<%
'객체생성
set fs = CreateObject("Scripting.FileSystemObject")
'TextStream 객체 생성
set file = fs.OpenTextFile("c:\test.txt")
'객체인지 확인
if IsObject(file) then
Response.Write "C:\test.txt 파일을 열었음"
end if
%>
----------------------------------------------------------
< TextStream 객체 >
FileSystemObject 로 생성된 객체를 이용하여 TextStream 객체를 생성하고,
이렇게 넘겨받은(리턴) TextStream 객체럴 어떻게 이용할 것인지 알아보자.
파일을 열면 TextStream 객체를 리턴하는데, 이렇게 리턴받은 객체를 이용하여 텍스트 파일을 다루는 방법을 알아본다.
> TextStream 객체
(프로퍼티)
- Close : 열린파일 닫기
- Read : 파일에서 문자들을 읽어온다.
- ReadAll : 하나의 문자열로 전체 파일 내용을 읽어온다.
- ReadLine : 파일에서 문자열로 한 줄을 읽어온다.
- Skip : 파일을 읽을때 문자를 건너뛰고 무시한다.
- SkipLine : 파일을 읽을때 다음줄을 건너뛰고 무시한다.
- Write : 파일에 문자를 쓴다.
- WriteLn : 문자를 쓰고 파일에 새줄 문자를 쓴다.
- WriteBlankLines : 파일에 빈 줄을 만든다.
(메서드)
- AtEndOfLine : 파일 포인터가 파일 줄 끝에 있으면 True 를 반환
- AtEndOfStream : 파일 포인터가 파일 끝에 있으면 True 를 반환
- Column : 파일에서 현재 문자의 열 번호를 리턴
- Line : 파일에서 현재 줄 번호 리턴, 시작은 1
파일 객체를 다루는데 있어 사용하는 상수(실제값이 외우기 힘들어 상수로 지정)를 쓰려면,
선언부분에 메타데이터로 타입라이브러리를 선언해야 한다.
윈도우 2000 에서는
<!--METADATA type="typelib" file="c:\winnt\system32\scrrun.dll"-->
이며, 윈도우 XP 에서는
<!--METADATA type="typelib" file="c:\windows\system32\scrrun.dll"-->
이다.
주의할점은, 메타데이터의 경우, 무조건 읽혀지는 태그이기 때문에,
ASP 코드로 조건문을 작성하여 처리할 수 없다.
즉,
<% if 1=2 then %>
<!--METADATA type="typelib" file="c:\noexistfile.dll"-->
<% end if %>
라는 코딩이 있다면, ASP 스크립트의 조건문에 의해 처리되지 않을것 같지만,
메타데이터는 무조건 읽히는 서버사이드 태그이기 때문에 실제로 그 위치에 파일이 없으면 에러가 발생한다.
책에 의하면, scrrun.dll 에는 Dictionary 객체와 파일시스템 객체등이 구현되어 있다고 하며,
vbCRLF 같은 스크립트 상수등이 구현되어 있다고 하는데,
그렇다면..
실제로 윈도우 XP 이상에서는 scrrun.dll 상수를 불러오지 않아도, Dictionary 객체나 파일시스템 객체, vbCRLF 상수등을 사용할 수 있는것으로 보아
애초에, 설치시 포함되어 있는것으로 보여지며, 따라서, XP 이상에서는 메타데이터를 이용해 dll 을 포함하지 않아도 상관없을것으로 보인다.
그러나, 테스트결과, FileSystemObject 관련 상수는 메타데이타를 로드하지 않으면 에러가 발생한다.
TextStream 객체에서 자주 쓰이는 '덮어쓰기' 혹은 '생성여부' 와 관련되어 자주쓰이는 상수의 원래값을 알아보면
ForReading : 1
ForWriting : 2
ForAppending : 8
이다.
상수는, 숫자로 되어있는 원래의 값을 이해하기 쉽도록 변수명으로 미리 정의해 놓은 불변의 이름이다.
ForReading 은 읽기전용을 의미
ForWriting 은 쓰기용으로써, 없다면 새로 파일을 생성한다.
ForAppending 은 기존 내용에 덧붙여 쓰는 경우를 의미한다.
이 상수들을 scrrun.dll 로드없이 사용하려면 아래와 같이 하면 된다.
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
다음은, 파일을 열어 내용을 쓰는 경우의 코딩이다.
<!--METADATA type="typelib" file="c:\windows\system32\scrrun.dll"-->
<br>파일쓰기<br>
<hr>
<%
'파일경로
fname = server.mappath("test.txt") 'test.txt 라는 파일이 있다는 가정하에 현재 폴더경로에 test.txt 라는 파일명을 붙여서 반환한다.
'파일 시스템 객체생성, 파일생성.
set fs = server.createobject("scripting.filesystemobject")
set file = fs.createtextfile(fname, ForWriting) 'ForWriting 으로 선언했으므로, 파일이 없다면 생성한다.
'파일 내용 쓰기
file.WriteLine "이 파일은 " & fname & " 입니다"
file.WriteLine "파일 쓴 날짜는 " & date & " 입니다"
file.WriteLine "파일 쓴 시간은 " & time & " 입니다"
'파일 닫기
file.close
set file=nothing
set fs=nothing
response.write "'" & fname & "' 에 내용을 저장 하였습니다"
%>
위의 코딩은, 파일객체를 생성한후, 해당 파일이 없다면 새로 생성하고,
파일을 열어 한줄씩 내용을 입력한후 닫는 내용이다.
여기서, 주의할점은 파일을 열때 ForWriting 상수를 이용하였다는 것이다.
쓰기용으로 파일을 열면, 기존에 들어있던 내용은 지워지고, 첫줄부터 다시 작성된다.
따라서, 기존의 내용에 덧붙여 내용을 기록하고 싶다면, 첨부용으로 열어야 하는데,
이때 사용하는 상수가 ForAppending 이다.
그러나, 주의할점은, ForAppending 로 열경우에는, 만약, 해당 파일이 없다면 에러가 발생할 수 있다는 것이다.
따라서, 기존내용에 추가하기 위해 ForAppending 을 이용해 열려면, 먼저 파일이 있는지 체크해야 한다.
이때 사용하는 것이 file.Exists 이다.
파일이 존재하지 않으면, ForWriting 상수를 이용해 파일을 생성하여, 글을 쓰고,
파일이 존재한다면, 파일을 열때 ForAppending 상수를 이용해서 열어서 글을 추가해야 한다.
아래의 코딩은, 파일을 열어서 내용을 읽어오는 코딩이다.
<!--METADATA type="typelib" file="c:\windows\system32\scrrun.dll"-->
<br>파일 내용읽기<br>
<hr>
<%
'파일 경로구하기
fname = server.mappath("test.txt")
'파일 시스템 객체 생성 및 파일 열기
set fs = server.createobject("scripting.filesystemobject")
set file = fs.opentextfile(fname, ForReading)
'파일 내용 읽기
Do While Not file.AtEndOfStream
txtLine = file.ReadLine
Response.Write textline & "<br>" '화면에 보여줄때 줄넘김을 위해 <br> 태그 추가
Loop
%>
댓글 없음:
댓글 쓰기