FileSystemObject
이 부분에 나와 있는 예제 코드는 FileSystemObject 개체 모델에서 사용할 수 있는 여러 기능을 실제로 적용한 예입니다. 이 코드에서는 개체 모델의 모든 기능을 함께 사용하여 작업하는 방법과 코드 내에서 기능을 효율적으로 사용하는 방법을 보여줍니다. 여기에 있는 코드는 포괄적으로 만들었기 때문에 이 코드를 컴퓨터에서 실행하려면 다른 코드를 추가하고 일부를 변경해야 합니다. Active Server Pages와 Windows Scripting Host 사이에서 사용자에게로 가는 여러 입력 및 출력 처리 방법이 다양하기 때문에 이런 변경은 필수적입니다.
Active Server Pages에서 이 코드를 실행하려면 아래 단계를 사용합니다.
- .asp 확장명을 사용하여 표준 웹 페이지를 만듭니다.
- 아래 예제 코드를 파일의;...; 태그 사이에 복사합니다.
- 코드 전체를 ```<%...%>``` 태그로 묶습니다.
- Option Explicit 문을 코드 내의 현재 위치에서 HTML 페이지의 상단 태그보다도 위쪽으로 이동합니다.
- Option Explicit 문 주위에 ```<%...%>``` 태그를 추가하여 이 내용이 서버 쪽에서 실행되도록 합니다.
- 아래 코드를 예제 코드 끝에 추가합니다.
Sub Print(x)
Response.Write ""
Response.Write x
Response.Write ""
End SubMain
위의 코드는 서버 쪽에서 실행한 후 결과를 클라이언트 쪽에 표시하는 인쇄 프로시저를 추가합니다. 이 코드를 Windows Scripting Host에서 실행하려면 예제 코드 끝에 아래 코드를 추가합니다.
Sub Print(x)
WScript.Echo x
End SubMain
코드는 다음 부분에 포함되어 있습니다.
FileSystemObject 예제 코드.
Option Explicit
코드 품질 관련 사항
-
아래 코드에서는 "&" 연산자로 짧은 문자열을 연결하여 문자열을 조작하는 일이 많습니다. 문자열 연결은 리소스가 많이 필요한 작업이기 때문에 문자열 연결을 사용하여 코드를 쓰는 것은 비효율적인 방법입니다. 하지만 코드 쓰기를 관리하는 데에는 적절합니다. 이 프로그램에서는 디스크 동작을 많이 수행할 뿐만 아니라 디스크가 문자열 연결에 필요한 메모리 동작보다는 훨씬 느리기 때문에 문자열 연결을 사용하였습니다. 이 코드는 설명용 코드이며 제품용 코드가 아님을 명심하십시오.
-
선언된 변수 액세스가 선언되지 않은 변수 액세스보다 약간 빠르기 때문에 "Option Explicit"을 사용했습니다. 이렇게 하면 DriveTypeCDROM을 DriveTypeCDORM으로 잘못 표시하는 경우와 같이 코드에 버그가 포함되는 것을 방지할 수도 있습니다.
-
코드를 읽기 쉽도록 만들기 위해 이 코드에는 오류 처리를 포함하지 않았습니다. 코드가 일반적인 상황에서 오류를 일으키지 않도록 미리 주의를 기울이기는 했지만 파일 시스템이 예기치 않은 결과를 보일 수도 있습니다. 제품 코드에서는 On Error Resume Next와 Err 개체를 사용하여 발생할 수 있는 오류를 잡아야 합니다.
편리한 전역 변수
Dim TabStop
Dim NewLineConst TestDrive = "C"
Const TestFilePath = "C:\Test"
Drive.DriveType에서 반환하는 상수
Const DriveTypeRemovable = 1
Const DriveTypeFixed = 2
Const DriveTypeNetwork = 3
Const DriveTypeCDROM = 4
Const DriveTypeRAMDisk = 5
File.Attributes에서 반환하는 상수
Const FileAttrNormal = 0
Const FileAttrReadOnly = 1
Const FileAttrHidden = 2
Const FileAttrSystem = 4
Const FileAttrVolume = 8
Const FileAttrDirectory = 16
Const FileAttrArchive = 32
Const FileAttrAlias = 64
Const FileAttrCompressed = 128
파일 열기에 필요한 상수
Const OpenFileForReading = 1
Const OpenFileForWriting = 2
Const OpenFileForAppending = 8
ShowDriveType
목적: Drive 개체의 드라이브 형식을 설명하는 문자열을 만듭니다. 다음을 보여줍니다. Drive.DriveType
Function ShowDriveType(Drive)
Dim S
Select Case Drive.DriveType
Case DriveTypeRemovable S = "이동식"
Case DriveTypeFixed S = "고정식"
Case DriveTypeNetwork S = "네트워크"
Case DriveTypeCDROM S = "CD-ROM"
Case DriveTypeRAMDisk S = "RAM 디스크"
Case Else S = "알 수 없음"
End Select
ShowDriveType = S
End Function
ShowFileAttr
목적: 파일 또는 폴더의 속성을 설명하는 문자열을 만듭니다. 다음을 보여줍니다.
- File.Attributes'
- Folder.Attributes
Function ShowFileAttr(File) ' File은 파일 또는 폴더입니다.
Dim S
Dim Attr Attr = File.Attributes
If Attr = 0 Then
ShowFileAttr = "일반"
Exit
Function End If
If Attr And FileAttrDirectory Then S = S & "디렉터리 "
If Attr And FileAttrReadOnly
Then
S = S & "읽기 전용 " If Attr And FileAttrHidden Then S = S & "숨김 " If Attr And FileAttrSystem
Then
S = S & "시스템 "
If Attr And FileAttrVolume
Then
S = S & "볼륨 "
If Attr And FileAttrArchive
Then S = S & "보관 "
If Attr And FileAttrAlias
Then
S = S & "별칭 "
If Attr And FileAttrCompressed
Then
S = S & "압축 " ShowFileAttr = SEnd Function
GenerateDriveInformation
목적: 사용할 수 있는 드라이브의 현재 상태를 설명하는 문자열을 만듭니다. 다음을 보여줍니다.
- FileSystemObject.Drives ' - Drives 컬렉션 반복' - Drives.Count' - Drive.AvailableSpace'
- Drive.DriveLetter'
- Drive.DriveType'
- Drive.FileSystem'
- Drive.FreeSpace'
- Drive.IsReady'
- Drive.Path'
- Drive.SerialNumber'
- Drive.ShareName'
- Drive.TotalSize'
- Drive.VolumeName
Function GenerateDriveInformation(FSO)
Dim Drives
Dim Drive
Dim S
Set Drives = FSO.Drives S = "드라이브 수:" & TabStop & Drives.Count & NewLine & NewLine
'보고서의 첫째 줄을 구성합니다.
S = S & String(2, TabStop) & "드라이브"
S = S & String(2, TabStop) & "파일"
S = S & TabStop & "전체"
S = S & TabStop & "전체"
S = S & TabStop & "전체"
S = S & TabStop & "전체"
'보고서의 둘째 줄을 구성합니다.
S = S & "문자"
S = S & TabStop & "경로"
S = S & TabStop & "형식"
S = S & TabStop & "준비?"
S = S & TabStop & "이름"
S = S & TabStop & "시스템"
S = S & TabStop & "공간"
S = S & TabStop & "공간"
S = S & TabStop & "공간"
S = S & String(2, TabStop) & "번호" & NewLine ' 구분용 줄입니다.
S = S & String(125, "-") & NewLine For Each Drive In Drives
S = S & Drive.DriveLetter
S = S & TabStop & Drive.Path
S = S & TabStop & ShowDriveType(Drive)
S = S & TabStop & Drive.IsReady If Drive.IsReady Then
If DriveTypeNetwork = Drive.DriveType Then
S = S & TabStop & Drive.ShareName
Else
S = S & TabStop & Drive.VolumeName End If
S = S & TabStop & Drive.FileSystem
S = S & TabStop & Drive.TotalSize
S = S & TabStop & Drive.FreeSpace
S = S & TabStop & Drive.AvailableSpace
S = S & TabStop & Hex(Drive.SerialNumber)
End If
S = S & NewLine
Next GenerateDriveInformation = S
End Function
GenerateFileInformation
목적: 파일의 현재 상태를 설명하는 문자열을 만듭니다. 다음을 보여줍니다. - File.Path' - File.Name' - File.Type'
- File.DateCreated'
- File.DateLastAccessed'
- File.DateLastModified' - File.Size
Function GenerateFileInformation(File)
Dim S
S = NewLine & "경로:" & TabStop & File.Path
S = S & NewLine & "이름:" & TabStop & File.Name
S = S & NewLine & "형식:" & TabStop & File.Type
S = S & NewLine & "속성:" & TabStop & ShowFileAttr(File)
S = S & NewLine & "만듬:" & TabStop & File.DateCreated
S = S & NewLine & "액세스:" & TabStop & File.DateLastAccessed
S = S & NewLine & "수정:" & TabStop & File.DateLastModified
S = S & NewLine & "크기" & TabStop & File.Size & NewLine
GenerateFileInformation = S
End Function
GenerateFolderInformation
목적: 폴더의 현재 상태를 설명하는 문자열을 만듭니다. 다음을 보여줍니다.
- Folder.Path
- Folder.Name
- Folder.DateCreated
- Folder.DateLastAccessed
- Folder.DateLastModified
- Folder.Size
Function GenerateFolderInformation(Folder)
Dim S
S = "경로:" & TabStop & Folder.Path
S = S & NewLine & "이름:" & TabStop & Folder.Name
S = S & NewLine & "속성:" & TabStop & ShowFileAttr(Folder)
S = S & NewLine & "만듬:" & TabStop & Folder.DateCreated
S = S & NewLine & "액세스:" & TabStop & Folder.DateLastAccessed
S = S & NewLine & "수정:" & TabStop & Folder.DateLastModified
S = S & NewLine & "크기:" & TabStop & Folder.Size & NewLine
GenerateFolderInformation = S
End Function
GenerateAllFolderInformation
목적: 폴더와 모든 파일, 하위 폴더의 현재 상태를 설명하는 문자열을 만듭니다. 다음을 보여줍니다.
- Folder.Path'
- Folder.SubFolders'
- Folders.Count
Function GenerateAllFolderInformation(Folder)
Dim S
Dim SubFolders
Dim SubFolder
Dim Files
Dim File
S = "폴더:" & TabStop & Folder.Path & NewLine & NewLine
Set Files = Folder.Files
If 1 = Files.Count Then
S = S & "파일이 하나 있습니다." & NewLine
Else
S = S & "파일이 " & Files.Count & " 개 있습니다." & NewLine
End If
If Files.Count <> 0 Then
For Each
File In Files S = S & GenerateFileInformation(File)
Next End
If Set SubFolders = Folder.SubFolders
If 1 = SubFolders.Count Then
S = S & NewLine & "하위 폴더가 하나 있습니다." & NewLine & NewLine
Else
S = S & NewLine & "하위 폴더가 " & SubFolders.Count & " 개 있습니다." & NewLine & NewLine
End If
If SubFolders.Count <> 0 Then
For Each SubFolder In SubFolders S = S & GenerateFolderInformation(SubFolder)
Next
S = S & NewLine
For Each SubFolder In SubFolders S = S & GenerateAllFolderInformation(SubFolder)
Next
End If
GenerateAllFolderInformation = S
End Function
GenerateTestInformation
목적: C:\Test 폴더와 모든 파일, 하위 폴더의 현재 상태를 설명하는 문자열을 만듭니다. 다음을 보여줍니다.
- FileSystemObject.DriveExists
- FileSystemObject.FolderExists
- FileSystemObject.GetFolder
Function GenerateTestInformation(FSO)
Dim TestFolder
Dim S
If Not FSO.DriveExists(TestDrive) Then
Exit Function
If Not FSO.FolderExists(TestFilePath)
Then
Exit Function
Set TestFolder = FSO.GetFolder(TestFilePath)
GenerateTestInformation = GenerateAllFolderInformation(TestFolder)
End Function
DeleteTestDirectory
목적: test 디렉터리를 삭제합니다. 다음을 보여줍니다.
- FileSystemObject.GetFolder
- FileSystemObject.DeleteFile
- FileSystemObject.DeleteFolder
- Folder.Delete
- File.Delete
Sub DeleteTestDirectory(FSO)
Dim TestFolder
Dim SubFolder
Dim File
파일을 삭제하는 두 가지 방법:
FSO.DeleteFile(TestFilePath & "\Beatles\OctopusGarden.txt")
Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
File.Delete '
폴더를 삭제하는 두 가지 방법:
FSO.DeleteFolder(TestFilePath & "\Beatles")
FSO.DeleteFile(TestFilePath & "\ReadMe.txt")
Set TestFolder = FSO.GetFolder(TestFilePath)
TestFolder.Delete
End Sub
CreateLyrics
목적: 한 폴더에 텍스트 파일 두 개를 구성합니다.' 다음을 보여줍니다.
- FileSystemObject.CreateTextFile
- TextStream.WriteLine
- TextStream.Write
- TextStream.WriteBlankLines
- TextStream.Close
Sub CreateLyrics(Folder) Dim TextStream <A NAME="CreateTextFile">
Set TextStream = Folder.CreateTextFile("OctopusGarden.txt") <A NAME="WriteToFile">
TextStream.Write("문어의 정원 ") ' 파일에 줄 바꿈이 추가되지 않습니다.
TextStream.WriteLine("(노래: 링고 스타)")
TextStream.WriteBlankLines(1)
TextStream.WriteLine("심해의 어두운 곳에 있는 문어의 정원에 있고 싶습니다.")
TextStream.WriteLine("그는 우리를 들여보내 줄 것이며, 우리가 어디에 있었는가를 압니다. -- 그 곳은 어두운 곳에 있는
문어의 정원입니다.")
TextStream.WriteBlankLines(2) <A NAME="Close">
TextStream.Close
Set TextStream = Folder.CreateTextFile("BathroomWindow.txt")
TextStream.WriteLine("그녀는 욕실 창문으로 들어 왔습니다(레논/메카트니).")
TextStream.WriteLine(")
TextStream.WriteLine("그녀는 은스푼으로 보호되어 있는 욕실 창문을 통하여 들어 왔습니다.")
TextStream.WriteLine("그러나 그녀는 지금 엄지손가락을 빨며 그녀만의 호수 언덕에서 방황하고 있습니다.")
TextStream.WriteBlankLines(2)
TextStream.Close
End Sub
GetLyrics
목적: lyrics 파일의 내용을 표시합니다. ' 다음을 보여줍니다.
- FileSystemObject.OpenTextFile
- FileSystemObject.GetFile
- TextStream.ReadAll
- TextStream.Close
- File.OpenAsTextStream
- TextStream.AtEndOfStream
- TextStream.ReadLine
Function GetLyrics(FSO)
Dim TextStream
Dim S
Dim File
텍스트 파일을 여는 데에는 여러 가지 방법이 있고, 파일에서 데이터를 읽는 데에도 여러 가지 방법이 있습니다. 다음에는 각각에 대해 두 가지 방법이 나와 있습니다.
Set TextStream = FSO.OpenTextFile(TestFilePath & "\Beatles\OctopusGarden.txt",
OpenFileForReading) <A NAME="ReadFromFile">
S = TextStream.ReadAll & NewLine & NewLine TextStream.Close
Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
Set TextStream = File.OpenAsTextStream(OpenFileForReading)
Do While Not TextStream.AtEndOfStream
S = S & TextStream.ReadLine & NewLine
Loop
TextStream.Close
GetLyrics = S
End Function
BuildTestDirectory
목적: FileSystemObject를 보여주는 디렉터리 계층을 구성합니다. 아래와 같은 순서로 계층을 구성합니다. C:\Test' C:\Test\ReadMe.txt' C:\Test\Beatles' C:\Test\Beatles\OctopusGarden.txt'
C:\Test\Beatles\BathroomWindow.txt' 다음을 보여줍니다.
- FileSystemObject.DriveExists
- FileSystemObject.FolderExists
- FileSystemObject.CreateFolder
- FileSystemObject.CreateTextFile
- Folders.Add
- Folder.CreateTextFile
- TextStream.WriteLine
- TextStream.Close
Function BuildTestDirectory(FSO)
Dim TestFolder
Dim SubFolders
Dim SubFolder
Dim TextStream
' (a) 드라이브가 존재하지 않거나 (b) 구성할 디렉터리가 이미 존재하면 빠져 나옵니다.
If Not FSO.DriveExists(TestDrive) Then BuildTestDirectory = False
Exit Function
End If
If FSO.FolderExists(TestFilePath) Then
BuildTestDirectory = False
Exit Function
End If
Set TestFolder = FSO.CreateFolder(TestFilePath)
Set TextStream = FSO.CreateTextFile(TestFilePath & "\ReadMe.txt")
TextStream.WriteLine("나의 서정 가요 모음")
TextStream.Close
Set SubFolders = TestFolder.SubFolders
Set SubFolder = SubFolders.Add("Beatles")
CreateLyrics SubFolder BuildTestDirectory = True
End Function
주 루틴 먼저, test 디렉터리, 하위 폴더, 파일을 만듭니다. ' 다음으로 사용할 수 있는 디스크 드라이브와 test 디렉터리에 ' 관한 정보를 넣고 다시 모든 것을 지웁니다. '
Sub Main Dim FSO ' 전역 데이터를 설정합니다.
TabStop = Chr(9)
NewLine = Chr(10) <A NAME="CreateFSO">
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not BuildTestDirectory(FSO) Then
Print "Test 디렉터리가 이미 존재하거나 만들 수 없습니다. 작업을 계속할 수 없습니다."
Exit Sub End
Print GenerateDriveInformation(FSO) & NewLine & NewLine
Print GenerateTestInformation(FSO)
& NewLine & NewLine
Print GetLyrics(FSO) & NewLine & NewLine
DeleteTestDirectory(FSO) br End Sub
파일 작업
Microsoft? Scripting Library - FileSystemObject 파일 작업 |
파일 작업은 크게 두 범주로 구분됩니다.
- 만들기, 데이터 추가와 삭제, 파일 읽기
- 파일 이동, 복사, 삭제
파일 만들기
빈 텍스트 파일을 만드는 방법에는 세 가지가 있습니다 ("텍스트 스트림"이라고도 함). 하나는 CreateTextFile 메서드를 사용하는 것입니다. 아래 예제는 VBScript에서 이 메서드를 사용하여 텍스트 파일을 작성하는 방법을 보여줍니다. ``` Dim fso, f1Set fso = CreateObject("Scripting.FileSystemObject")Set f1 = fso.CreateTextFile("c:\testfile.txt", True) ``` JScript에서 이 메서드를 사용하려면 아래 코드를 사용합니다. ``` var fso, f1;fso = new ActiveXObject("Scripting.FileSystemObject"); f1 = fso.CreateTextFile("c:\\testfile.txt", true); ``` 예제 코드를 보면 CreateTextFile 메서드를 FileSystemObject에서 사용하는 방법을 알 수 있습니다. 텍스트 파일을 만드는 둘째 방법은 ForWriting 플래그를 설정하고 FileSystemObject 개체의 OpenTextFile 메서드를 사용하는 것입니다. VBScript에서 사용하는 코드는 아래 예제와 같습니다. ``` Dim fso, tsConst ForWriting = 2Set fso = CreateObject("Scripting. FileSystemObject")Set ts = fso.OpenTextFile("c:\test.txt", ForWriting, True) ``` JScript에서 이 메서드를 사용하여 텍스트 파일을 만들려면 아래 코드를 사용합니다. ``` var fso, ts;var ForWriting= 2;fso = new ActiveXObject("Scripting.FileSystemObject");ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true); ``` 텍스트 파일을 만드는 세째 방법은 ForWriting 플래그를 설정하고 OpenAsTextStream 메서드를 사용하는 것입니다. VBScript에서 이 메서드를 사용하려면 아래 코드를 사용합니다. ``` Dim fso, f1, tsConst ForWriting = 2Set fso = CreateObject("Scripting.FileSystemObject")fso.CreateTextFile ("c:\test1.txt")Set f1 = fso.GetFile("c:\test1.txt")Set ts = f1.OpenAsTextStream(ForWriting, True) ``` JScript에서는 아래 예제와 같은 코드를 사용합니다. ```var fso, f1, ts;var ForWriting = 2;fso = new ActiveXObject("Scripting.FileSystemObject");fso.CreateTextFile ("c:\\test1.txt");f1 = fso.GetFile("c:\\test1.txt");ts = f1.OpenAsTextStream(ForWriting, true); ``` #### 파일에 데이터 추가 텍스트 파일을 만든 후 아래와 같은 세 단계를 사용하여 데이터를 파일에 추가합니다.- 텍스트 파일을 엽니다.
- 데이터를 씁니다.
- 파일을 닫습니다. 기존 파일을 열려면 FileSystemObject 개체의 OpenTextFile 메서드나 File 개체의 OpenAsTextStream 메서드를 사용합니다. 열린 텍스트 파일에 데이터를 쓰려면 아래 표에 설명되어 있는 작업에 따라 TextStream 개체의 Write, WriteLine 또는WriteBlankLines 메서드를 사용합니다.
작업 | 메서드 |
열린 텍스트 파일에 뒤에 오는 줄 바꿈 문자없이 데이터를 씁니다. | Write |
열린 텍스트 파일에 데이터와 뒤에 오는 줄 바꿈 문자를 씁니다. | WriteLine |
열린 텍스트 파일에 빈 줄을 하나 이상 씁니다. | WriteBlankLines |
예제 코드를 보면 FileSystemObject에서 Write, WriteLine, WriteBlankLines 메서드를 사용하는 방법을 알 수 있습니다. 열린 파일을 닫으려면 TextStream 개체의 Close 메서드를 사용합니다. FileSystemObject에서 Close 메서드를 사용하는 방법을 알 수 있습니다.
참고 줄 바꿈 문자는 커서를 아래 줄 처음 부분으로 넘기는 문자(운영 체제에 따라 다름)를 포함합니다(캐리지 리턴/줄 바꿈). 문자열 중에는 마지막 부분에 이미 그러한 인쇄되지 않는 문자를 포함하고 있는 것도 있습니다. | |
아래 VBScript 예제는 파일을 열고, 세 가지 쓰기 방법을 모두 사용하여 파일에 데이터를 추가하고, 파일을 닫는 방법을 보여줍니다.
Sub CreateFile()
Dim fso, tf
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile("c:\testfile.txt", True) ' 줄 바꿈 문자가 있는 줄을 씁니다.
tf.WriteLine("테스트 중 1, 2, 3.") ' 파일에 줄 바꿈 문자를 세 개 씁니다.
tf.WriteBlankLines(3) ' 줄을 씁니다.
tf.Write ("테스트입니다.")
tf.CloseEnd Sub
아래 예제는 JScript의 세 메서드 사용법을 보여줍니다.
function CreateFile(){
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
tf = fso.CreateTextFile("c:\\testfile.txt", true); // 줄 바꿈 문자가 있는 줄을 씁니다.
tf.WriteLine("테스트 중 1, 2, 3.") ; // 파일에 줄 바꿈 문자를 세 개 씁니다.
tf.WriteBlankLines(3) ; // 줄을 씁니다.
tf.Write ("테스트입니다.");
tf.Close();}
파일 읽기
텍스트 파일에서 데이터를 읽으려면 TextStream 개체의 Read, ReadLine 또는 ReadAll 메서드를 사용합니다. 아래 표에는 여러 작업에 사용할 수 있는 메서드가 설명되어 있습니다.작업 | 메서드 |
파일에서 지정한 수의 문자를 읽습니다. | Read |
한 줄 전체를 읽습니다(줄 바꿈 문자까지, 그러나 줄 바꿈 문자는 제외). | ReadLine |
텍스트 파일의 내용 전체를 읽습니다. | ReadAll |
<A HREF="./sgFSOSample.htm#ReadFromFile">예제 코드를 보면 FileSystemObject에서 ReadAll 메서드와 ReadLine 메서드를 사용하는 방법을 알 수 있습니다. Read 메서드나 ReadLine 메서드를 사용하면서 데이터의 특정 부분을 건너뛰려면 Skip 메서드 또는 SkipLine 메서드를 사용합니다. 읽기 메서드의 결과 텍스트는 문자열로 저장되며 컨트롤에 표시하거나 문자열 함수(Left, Right, Mid)로 구문을 분석하거나 연결하는 등의 조작을 할 수 있습니다. 아래 VBScript 예제는 파일을 열고, 내용을 쓰고, 다시 읽는 방법을 보여줍니다.
Sub ReadFiles
Dim fso, f1, ts, s
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True) ' 줄을 씁니다.
Response.Write "파일을 쓰고 있습니다 "
f1.WriteLine "Hello World"
f1.WriteBlankLines(1)
f1.Close ' 파일 내용을 읽습니다.
Response.Write "파일을 읽고 있습니다"
Set ts = fso.OpenTextFile("c:\testfile.txt", ForReading)
s = ts.ReadLine
Response.Write "파일 내용 = '" & s & "'"
ts.CloseEnd Sub
아래 코드는 JScript에서 같은 작업을 하는 방법을 보여줍니다.
function ReadFiles(){
var fso, f1, ts, s; var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true); // 줄을 씁니다.
Response.Write("파일을 쓰고 있습니다 ");
f1.WriteLine("안녕하십니까?");
f1.WriteBlankLines(1);
f1.Close(); // 파일 내용을 읽습니다.
Response.Write("파일을 읽고 있습니다 ");
ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
s = ts.ReadLine();
Response.Write("파일 내용 = '" + s + "'");
ts.Close();}
파일 이동, 복사, 삭제
FSO 개체 모델에는 아래 표에 설명되어 있는 것과 같이 파일 이동, 복사, 삭제에 대해 각각 두 가지 메서드가 준비되어 있습니다.
작업 | 메서드 |
파일을 이동합니다. | File.Move 또는 FileSystemObject.MoveFile |
파일을 복사합니다. | File.Copy 또는 FileSystemObject.CopyFile |
파일을 삭제합니다. | File.Delete 또는 FileSystemObject.DeleteFile |
예제 코드를 보면 FileSystemObject에서 파일을 삭제하는 두 가지 방법을 알 수 있습니다. 아래 VBScript 예제에서는 C 드라이브의 루트 디렉터리에 텍스트 파일을 만들고, 정보를 쓰고, 파일을 \tmp라는 디렉터리로 이동하고, \temp라는 디렉터리에 복사본을 만든 후에 두 디렉터리 모두에서 복사본을 삭제합니다. 아래 예제를 실행하려면 먼저 C 드라이브의 루트 디렉터리에 \tmp와 \temp 디렉터리를 만듭니다.
Sub ManipFiles
Dim fso, f1, f2, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
Response.Write "파일을 쓰고 있습니다 " ' 줄을 씁니다.
f1.Write ("테스트입니다.") ' 파일을 닫습니다.
f1.Close Response.Write "파일을 c:\tmp로 이동합니다" ' C:\의 루트에 있는 파일에 대한 핸들을 얻습니다.
Set f2 = fso.GetFile("c:\testfile.txt") ' 파일을 \tmp 디렉터리로 이동합니다.
f2.Move ("c:\tmp\testfile.txt")
Response.Write "파일을 c:\temp로 복사합니다 " ' 파일을 \temp로 복사합니다.
f2.Copy ("c:\temp\testfile.txt")
Response.Write "파일을 삭제하고 있습니다 " ' 파일의 현재 위치에 대한 핸들을 얻습니다.
Set f2 = fso.GetFile("c:\tmp\testfile.txt")
Set f3 = fso.GetFile("c:\temp\testfile.txt")
' 파일을 삭제합니다.
f2.Delete f3.Delete Response.Write "완료!"End Sub
아래 코드를 사용하면 JScript에서 같은 결과를 얻을 수 있습니다.
function ManipFiles(){
var fso, f1, f2, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
Response.Write("파일을 쓰고 있습니다 "); // 줄을 씁니다.
f1.Write("텍스트입니다."); // 파일을 닫습니다.
f1.Close();
Response.Write("파일을 c:\\tmp로 이동합니다 "); // C:\의 루트에 있는 파일에 대한 핸들을 얻습니다.
f2 = fso.GetFile("c:\\testfile.txt"); // 파일을 \tmp 디렉터리로 이동합니다.
f2.Move ("c:\\tmp\\testfile.txt");
Response.Write("파일을 c:\\temp로 복사합니다 "); // 파일을 \temp로 복사합니다.
f2.Copy ("c:\\temp\\testfile.txt");
Response.Write("파일을 삭제하고 있습니다 "); // 파일의 현재 위치에 대한 핸들을 얻습니다.
f2 = fso.GetFile("c:\\tmp\\testfile.txt");
f3 = fso.GetFile("c:\\temp\\testfile.txt"); // 파일을 삭제합니다.
f2.Delete(); f3.Delete();
Response.Write("완료!");}
드라이브와 폴더 작업
FileSystemObject 드라이브와 폴더 작업 FileSystemObject(FSO) 개체 모델을 사용하면 Windows 탐색기에서 대화형으로 할 수 있는 작업을 프로그램에서 드라이브와 폴더로 할 수 있습니다.
드라이브 정보 얻기
Drive 개체를 사용하면 실제로 또는 네트워크를 통해 시스템에 연결되어 있는 다양한 드라이브에 관한 정보를 얻을 수 있습니다. 이 개체의 속성을 사용하면 아래와 같은 정보를 얻을 수 있습니다.
- 바이트 단위로 나타낸 드라이브의 전체 크기(TotalSize 속성)
- 바이트 단위로 나타낸 사용 가능한 드라이브 공간 크기(AvailableSpace 또는 FreeSpace 속성)
- 드라이브에 지정한 문자(DriveLetter 속성)
- 이동식, 고정식, 네트워크, CD-ROM, RAM 디스크 등의 드라이브 형식(DriveType 속성)
- 드라이브의 일련 번호(SerialNumber 속성)
- FAT, FAT32, NTFS 등 드라이브에서 사용하는 파일 시스템의 형식(FileSystem 속성)
- 드라이브 사용 가능 여부(IsReady 속성)
- 공유 또는 볼륨 이름(ShareName과 VolumeName 속성)
- 드라이브의 경로 또는 루트 폴더(Path와 RootFolder 속성)
예제 코드를 보면 FileSystemObject에서 이런 속성을 사용하는 방법을 알 수 있습니다.
Drive 개체 사용 예제
Drive 개체는 드라이브에 관한 정보를 모으는 데에 사용합니다. 아래 코드에서는 실제 Drive 개체에 대한 참조가 없는 대신 GetDrive 메서드를 사용하여 기존 Drive 개체(이 경우에는 drv)에 대한 참조를 얻습니다.아래 예제는 VBScript에서 Drive 개체를 사용하는 방법을 보여줍니다.
Sub ShowDriveInfo(drvPath)
Dim fso, drv, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
s = "드라이브 " & UCase(drvPath) & " - " s = s & drv.VolumeName & ";"
s = s & "전체 공간: " & FormatNumber(drv.TotalSize / 1024, 0) s = s & " Kb" & ";"
s = s & "사용 가능한 공간: " & FormatNumber(drv.FreeSpace / 1024, 0) s = s & " Kb" & ";" Response.Write sEnd Sub
아래 코드에서는 같은 기능을 하는 JScript 사용법을 보여줍니다.
function ShowDriveInfo1(drvPath){
var fso, drv, s =";
fso = new ActiveXObject("Scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName(drvPath));
s += "드라이브 " + drvPath.toUpperCase()+ " - ";
s += drv.VolumeName + ";";
s += "전체 공간: " + drv.TotalSize / 1024;
s += " Kb" + ";";
s += "사용 가능한 공간: " + drv.FreeSpace / 1024;
s += " Kb" + ";"; Response.Write(s);}
폴더 작업
아래 표에는 일반적인 폴더 작업과 이런 작업에 사용되는 메서드가 설명되어 있습니다.
작업 | 메서드 |
폴더를 만듭니다. | FileSystemObject.CreateFolder |
폴더를 삭제합니다. | Folder.Delete 또는 FileSystemObject.DeleteFolder |
폴더를 이동합니다. | Folder.Move 또는 FileSystemObject.MoveFolder |
폴더를 복사합니다. | Folder.Copy 또는 FileSystemObject.CopyFolder |
폴더 이름을 검색합니다. | Folder.Name |
드라이브에서 폴더의 존재를 찾습니다. | FileSystemObject.FolderExists |
기존 Folder 개체의 인스턴스를 얻습니다. | FileSystemObject.GetFolder |
폴더의 상위 폴더 이름을 찾습니다. | FileSystemObject.GetParentFolderName |
시스템 폴더의 경로를 찾습니다. | FileSystemObject.GetSpecialFolder |
예제 코드를 보면 FileSystemObject에서 사용되는 메서드와 속성의 수를 알 수 있습니다.<P>아래 예제는 VBScript에서 폴더를 조작하고 정보를 얻는 데에 사용되는 Folder 개체와 FileSystemObject 개체의 사용법을 보여줍니다.
Sub ShowFolderInfo()
Dim fso, fldr, s ' FileSystemObject의 인스턴스를 얻습니다.
Set fso = CreateObject("Scripting.FileSystemObject") ' Drive 개체를 얻습니다.
Set fldr = fso.GetFolder("c:") ' 상위 폴더 이름을 인쇄합니다.
Response.Write "상위 폴더 이름: " & fldr & ";" ' 드라이브 이름을 인쇄합니다.
Response.Write "포함한 드라이브 " & fldr.Drive & ";" ' 루트 파일 이름을 인쇄합니다.
If fldr.IsRootFolder = True Then Response.Write "루트 폴더입니다." & ";";" Else Response.Write "루트 폴더가 아닙니다." & ";;" End If ' FileSystemObject 개체에 새 폴더를 만듭니다.
fso.CreateFolder ("C:\Bogus") Response.Write "만든 폴더 C:\Bogus" & ";" ' 폴더의 기본 이름을 인쇄합니다.
Response.Write "기본 이름 = " & fso.GetBaseName("c:\bogus") & ";" ' 새로 만든 폴더를 삭제합니다.
fso.DeleteFolder ("C:\Bogus")
Response.Write "삭제한 폴더 C:\Bogus" & ";"End Sub
아래 예제는 JScript의 Folder 개체와 FileSystemObject 개체의 사용법을 보여줍니다.
function ShowFolderInfo(){
var fso, fldr, s = "; // FileSystemObject의 인스턴스를 얻습니다.
fso = new ActiveXObject("Scripting.FileSystemObject"); // Drive 개체를 얻습니다.
fldr = fso.GetFolder("c:"); // 상위 폴더 이름을 인쇄합니다.
Response.Write("상위 폴더 이름: " + fldr + ";"); // 드라이브 이름을 인쇄합니다. Response.Write("포함한 드라이브 " + fldr.Drive + ";"); // 루트 파일 이름을 인쇄합니다.
if (fldr.IsRootFolder) Response.Write("루트 폴더입니다.");
else Response.Write("루트 폴더가 아닙니다.");
Response.Write(";;"); // FileSystemObject 개체에 새 폴더를 만듭니다.
fso.CreateFolder ("C:\\Bogus"); Response.Write("만든 폴더 C:\\Bogus" + ";"); // 폴더의 기본 이름을 인쇄합니다.
Response.Write("기본 이름 = " + fso.GetBaseName("c:\\bogus") + ";"); // 새로 만든 폴더를 삭제합니다.
fso.DeleteFolder ("C:\\Bogus"); Response.Write("삭제한 폴더 C:\\Bogus" + ";");}
FileSystemObject 프로그래밍
FileSystemObject (FSO) 개체 모델로 프로그래밍을 하려면
- CreateObject 메서드를 사용하여 FileSystemObject 개체를 만듭니다.
- 새로 만든 개체에 적절한 메서드를 사용합니다.
- 개체 속성에 액세스합니다.
FSO 개체 모델은 Scrrun.dll 파일에 있는 Scripting 형식 라이브러리에 포함되어 있습니다. 따라서 FSO 개체 모델을 사용하려면 웹 서버의 적절한 시스템 디렉터리에 Scrrun.dll이 있어야 합니다.
FileSystemObject 개체 만들기
먼저, CreateObject 메서드를 사용하여 FileSystemObject 개체를 만듭니다. VBScript에서는 아래 코드를 사용하여 FileSystemObject 인스턴스를 만듭니다.
Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")
예제 코드를 보면 FileSystemObject 인스턴스를 만드는 방법을 알 수 있습니다.JScript에서는 아래 코드를 사용하여 같은 결과를 얻습니다.
var fso;fso = new ActiveXObject("Scripting.FileSystemObject");
두 예제 모두에서 Scripting은 형식 라이브러리의 이름이고 FileSystemObject는 만들 개체의 이름입니다. 다른 개체를 만드는 횟수와는 관계없이 FileSystemObject 개체 인스턴스는 하나만을 만들 수 있습니다.
적절한 메서드 사용
둘째로, FileSystemObject 개체의 적절한 메서드를 사용합니다. 예를 들어, 새 개체를 만들려면 CreateTextFile과 CreateFolder (FSO 개체 모델에서는 드라이브를 만들거나 삭제하는 기능을 지원하지 않음) 중 하나를 사용합니다.<P>개체를 삭제하려면 FileSystemObject 개체의 DeleteFile과 DeleteFolder 메서드 또는 File과 Folder 개체의 Delete 메서드를 사용합니다. 적절한 메서드를 사용하면 파일을 복사하거나 이동할 수도 있습니다. <P>
참고 FileSystemObject 개체 모델 기능 중 일부는 중복되어 있습니다. 예를 들어, 파일을 복사할 때에는 FileSystemObject 개체의 CopyFile 메서드를 사용할 수도 있고 File 개체의 Copy 메서드를 사용할 수도 있습니다. 두 메서드는 작동 방식이 완전히 같으며, 두 메서드가 준비되어 있는 것은 프로그래밍의 융통성을 위해서입니다.
기존 드라이브, 파일, 폴더 액세스
기존 드라이브, 파일, 폴더에 액세스하려면 FileSystemObject 개체의 "get" 메서드를 사용합니다.<P><UL>
Dim fso, f1Set
fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile("c:\test.txt")
JScript에서 같은 일을 하려면 아래 코드를 사용합니다.
var fso, f1;fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.GetFile("c:\\test.txt");
"create" 함수는 개체에 대한 핸들을 반환하기 때문에 새로 만든 개체에는 "get" 메서드를 사용하지 않습니다. 예를 들어, CreateFolder 메서드로 새 폴더를 만든 경우에는 GetFolder 메서드로 Name, Path, Size 등의 속성에 액세스하지 않습니다. 새로 만든 폴더의 핸들을 얻으려면 CreateFolder 함수에 변수를 설정한 후 속성, 메서드, 이벤트 등에 액세스합니다. VBScript에서 이 작업을 하려면 아래 코드를 사용합니다.
Sub CreateFolder
Dim fso, fldr
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.CreateFolder("C:\MyTest")
Response.Write "만든 폴더: " & fldr.NameEnd Sub
JScript로 CreateFolder 함수에 변수를 설정하려면 아래 구문을 사용합니다.
function CreateFolder(){
var fso, fldr;
fso = ActiveXObject("Scripting.FileSystemObject");
fldr = fso.CreateFolder("C:\\MyTest");
Response.Write("만든 폴더: " + fldr.Name);
}
개체 속성 액세스
개체에 대한 핸들을 얻고 나면 속성에 액세스할 수 있습니다. 예를 들어, 특정 폴더의 이름을 얻으려면 먼저 개체 인스턴스를 만든 후 적절한 메서드로 (이 경우에는 폴더가 이미 존재하기 때문에 GetFolder 메서드임) 핸들을 얻습니다.VBScript로 GetFolder 메서드의 핸들을 얻으려면 아래 코드를 사용합니다. ``` Set fldr = fso.GetFolder("c:\") ``` JScript로 같은 결과를 얻으려면 아래 코드를 사용합니다. ``` var fldr = fso.GetFolder("c:\\"); ``` 이제 Folder 개체에 대한 핸들을 얻었기 때문에 Name 속성을 확인할 수 있습니다. VBScript에서 이 속성을 확인하려면 아래 코드를 사용합니다.``` Response.Write "폴더 이름: " & fldr.Name ``` JScript에서 Name 속성을 확인하려면 아래 구문을 사용합니다. ``` Response.Write("폴더 이름: " + fldr.Name); ``` VBScript에서 파일을 마지막으로 수정한 시간을 찾으려면 아래 구문을 사용합니다.
Dim fso, f1Set fso = CreateObject("Scripting.FileSystemObject")' 쿼리에 사용할 File 개체를 얻습니다.
Set f1 = fso.GetFile("c:\detlog.txt") ' 정보를 인쇄합니다.
Response.Write "마지막으로 파일을 수정한 시간: " & f1.DateLastModified
JScript에서 같은 내용을 찾으려면 아래 코드를 사용합니다.
var fso, f1;fso = new ActiveXObject("Scripting.FileSystemObject");// 쿼리에 사용할 File 개체를 얻습니다.
f1 = fso.GetFile("c:\\detlog.txt");
// 정보를 인쇄합니다.
Response.Write("마지막으로 파일을 수정한 시간: " + f1.DateLastModified);
FileSystemObject 개체
(FSO) 개체 모델에는 아래 개체와 컬렉션이 포함됩니다.
개체/컬렉션 | 설명 |
FileSystemObject | 주 개체입니다. 드라이브, 폴더 및 파일에 관한 정보를 만들고, 삭제하고, 확보하게 해 줄 뿐만 아니라 일반적으로 드라이브, 폴더 및 파일을 조작하게 해 주는 메서드와 속성이 포함되어 있습니다. 이 개체에 연결되어 있는 많은 메서드들은 다른 FSO 개체에 메서드를 복사합니다. 이런 메서드는 사용의 편의를 위해 마련된 것입니다. |
Drive | 개체입니다. 공유 이름과 사용할 수 있는 공간 크기 등 시스템에 연결된 드라이브에 관한 정보를 얻을 수 있는 메서드와 속성이 포함되어 있습니다. "드라이브"가 꼭 하드 디스크를 의미하는 것은 아니고, CD-ROM이나 RAM 디스크 등도 드라이브에 해당될 수 있습니다. 드라이브가 실제로 시스템에 연결되어 있을 필요는 없습니다. 네트워크를 통해 논리적으로 연결되어 있어도 좋습니다. |
Drives | 컬렉션입니다. 실제로 또는 논리적으로 시스템에 연결되어 있는 드라이브 목록을 제공합니다. Drives 컬렉션에는 모든 드라이브가 형식에 관계없이 포함됩니다. 이동식 매체 드라이브는 매체가 삽입되어 있지 않더라도 이 컬렉션에 나타납니다. |
File | 개체입니다. 파일을 만들거나 삭제, 이동하는 데에 사용하는 메서드와 속성이 포함되어 있습니다. 또한 시스템 쿼리를 통해 파일 이름, 경로, 기타 다양한 속성을 얻을 수 있도록 합니다. |
Files | 컬렉션입니다. 폴더에 포함되어 있는 모든 파일 목록을 제공합니다. |
Folder | 개체입니다. 폴더를 만들거나 삭제, 이동하는 데에 사용하는 메서드와 속성이 포함되어 있습니다. 또, 시스템 쿼리를 통해 폴더 이름, 경로, 기타 다양한 속성을 얻을 수 있도록 합니다. |
Folders | 컬렉션입니다. Folder에 있는 모든 폴더 목록을 제공합니다. |
TextStream | 개체입니다. 텍스트 파일을 읽고 쓸 수 있도록 합니다. |
Request
Request.ServerVariables("http_host") : www.domina.co.kr로 표시
Request.ServerVariables("Script_Name") : 웹루터에서부터의 현재까지의 경로 및 현재 파일명
Request.ClientCertificate : 사용자가 페이지나 리소스를 액세스할 때 서버로 전달한 클라이언트 증명서에 있는 모든 필드와 엔트리값(읽기 전용)
Request.Cookies : 사용자의 시스템에서 요청과 함께 전달된 모든 쿠키값
Request.Form : 폼 요청으로 전송된(POST 사용) 모든 HTML 컨트롤 요소 값
Request.QueryString : 사용자 요청에서 URL에 추가된 모든 이름/값 쌍들이나, GET 방식이 사용된 폼에 있는 HTML 컨트롤 요소값들(읽기 전용)
Request.ServerVariables : 클라이언트로부터 이들의 요청과 함께 전달된 모든 HTTP 헤더 값들과 웹 서버의 여러 가지 환경 변수값들(읽기 전용)
mid
지정된 문자열의 lengthnum 자릿수부터 length 만큼의 문자를 반환
Mid(str, lengthnum, length)
left
지정된 문자열(str)의 왼쪽부터 length 문자만 반환
Left(str, length)
Table of contents 목차
- FileSystemObject
- 편리한 전역 변수
- Drive.DriveType에서 반환하는 상수
- File.Attributes에서 반환하는 상수
- 파일 열기에 필요한 상수
- ShowDriveType
- ShowFileAttr
- GenerateDriveInformation
- GenerateFileInformation
- GenerateFolderInformation
- GenerateAllFolderInformation
- GenerateTestInformation
- DeleteTestDirectory
- CreateLyrics
- GetLyrics
- BuildTestDirectory
- 파일 작업
- 파일 이동, 복사, 삭제
- 드라이브와 폴더 작업