Global It Leader!!



 
 

VB FSO를 이용한 파일 컨트롤

페이지 정보

작성자 no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 조회 5,104회 작성일 13-12-20 21:33

본문

Copy, Delete, Move, OpenAsTextStream 같은 새로운 개체 지향 FSO 개체를 사용하거나 Open, Close, FileCopy, GetAttr 등과 같은 기존 함수를 사용하여
Visual Basic에서 파일 작업을 할 수 있습니다. 파일 형식과는 관계 없이 파일을 이동, 복사, 삭제할 수 있습니다.
기존 함수를 사용하는 방법에 대한 자세한 내용은 이 장에 들어 있는 "구식 파일 입/출력문과 함수를 사용하여 파일 처리"를 참조하십시오.
이 절의 나머지 부분은 파일 작업에서 사용하는 새로운 FSO 개체와 메서드와 속성을 사용하는 방법에 대하여 설명합니다.
파일 조작에는 두 가지 종류가 있습니다.
데이터 작성, 추가, 삭제 및 파일 읽기

파일 이동, 복사, 삭제
FSO를 사용한 파일 작성 및 데이터 추가
"텍스트 스트림"이라고도 하는 순차 텍스트 파일을 만드는 3가지 방법이 있습니다. 한 가지 방법은 CreateTextFile 메서드를 사용하는 것입니다.
빈 텍스트 파일을 만들려면 아래 코드를 사용합니다.
Dim fso As New FileSystemObject, fil As File
Set fil = fso.CreateTextFile("c:\testfile.txt", True)
메모 FSO 개체 모델은 아직 임의 파일이나 이진 파일 만들기를 지원하지 않습니다.
임의 파일이나 이진 파일을 만들려면 Random이나 Binary 플래그와 함께 Open 명령을 사용하십시오.
임의 파일이나 이진 파일을 조작하는 방법에 대한 정보는 이 장의 "임의 파일 액세스 사용"과 "이진 파일 액세스 사용"에서 설명합니다.
다른 방법은 ForWriting 플래그를 설정하여 FileSystemObject의 OpenTextFile 메서드를 사용하는 것입니다.
Dim fso As New FileSystemObject, ts As New TextStream
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting)
또는 ForWriting 플래그를 설정하여 OpenAsTextStream 메서드를 사용할 수 있습니다.
Dim fso As New FileSystemObject, fil As File, ts As TextStream
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("test1.txt")
Set fil = fso.GetFile("test1.txt")
Set ts = fil.OpenAsTextStream(ForWriting)
파일에 데이터 추가
텍스트 파일을 작성한 다음 아래와 같은 3단계로 데이터를 추가할 수 있습니다.
1.데이터를 쓰기 위해 텍스트 파일을 엽니다.
        파일을 열려면 File 개체의 OpenAsTextStream 메서드나 FileSystemObject 개체의 OpenTextFile 메서드를 사용할 수 있습니다.
2.데이터를 씁니다.
       열려있는 텍스트 파일에 데이터를 쓰려면 TextStream 개체의 Write 메서드나 WriteLine 메서드를 사용합니다.
       Write 메서드와 WriteLine 메서드의 유일한 차이는 WriteLine 메서드는 지정된 문자열 끝에 줄 바꿈 문자를 추가한다는 것입니다.
       새 줄을 텍스트 파일에 추가하려면 WriteBlankLines 메서드를 사용합니다.
3.파일을 닫습니다.
열려 있는 파일을 닫으려면 TextStream 개체의 Close 메서드를 사용합니다.
 
아래 예제는 3개의 쓰기 메서드 모두를 사용하여 파일을 열고 데이터를 추가하고 파일을 닫습니다.
Sub Create_File()
Dim fso, txtfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
txtfile.Write ("테스트용입니다. ") ' 한 줄을 씁니다.
' 줄 바꿈 문자를 사용하여 한 줄을 씁니다.
txtfile.WriteLine("테스트 1, 2, 3.")
' 3개의 줄 바꿈 문자를 파일에 씁니다.
txtfile.WriteBlankLines(3)
txtfile.Close
End Sub
FSO를 사용하여 파일 읽기
텍스트 파일에서 데이터를 읽으려면 TextStream 개체의 Read나 ReadLine, ReadAll 메서드를 사용합니다.
작업 메서드
파일에서 지정된 개수의 문자를 읽습니다. Read
줄 바꿈 문자(줄 바꿈 문자 제외)까지 한 줄 전체를 읽습니다. ReadLine
텍스트 파일의 전체 내용을 읽습니다. ReadAll

Read 메서드나 ReadLine 메서드를 사용할 때 데이터의 특정 부분을 건너 뛰려면 Skip 메서드나
SkipLine 메서드를 사용할 수 있습니다.
읽기 메서드의 결과 텍스트는 컨트롤에 표시될 수 있고 Left, Right, Mid 같은 문자열 연산자로
구문 분석될 수 있으며 합칠 수 있는 문자열에 저장됩니다.
메모 vbNewLine 상수는 운영 체제에 따라 한 문자 또는 몇 개의 문자를 가지고 있으며 커서를
다음 줄(캐리지 리턴 또는 라인 피드)의 시작 부분으로 이동합니다.
일부 문자열의 끝에는 화면에 출력할 수 없는 문자가 있을 수 있습니다.
예제
Sub Read_Files()
Dim fso As New FileSystemObject, txtfile, _
fil1 As File, ts As TextStream
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "파일에 쓰는 중"
' 한 줄을 씁니다.
Set fil1 = fso.GetFile("c:\testfile.txt")
Set ts = fil1.OpenAsTextStream(ForWriting)
ts.Write "안녕하십니까?"
ts.Close
' 파일의 내용을 읽습니다.
Set ts = fil1.OpenAsTextStream(ForReading)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub

하하 -_-; 성의가 너무 없나요 -_-;?
OpenTextFile(filename, iomode, create, format)
filename은 파일경로를 입력하시면 됩니다.
iomode는 읽기전용인지 파일 끝에 내용을 추가할껀지 값을 입력하시면 되고요.
1이 읽기전용,
8이 내용추가 입니다.
format 인수 값은 아래랑 같아요.
?2 시스템의 기본값으로 파일을 엽니다.
?1 Unicode로 파일을 엽니다.
0 ASCII로 파일을 엽니다.
그러니까, File개체의 OpenTextFile메서드로 읽으신다음에
한 줄씩 읽어 들이시니까 ReadLine메서드 사용하시면되고요
그리고 ReadLine메서드 사용과 동시에 변수에 입력하세요.
a가 500 b가 90 c가 2000인것을 500902000으로 바꾸고 싶으시면
tmp = a & b & c에 입력하시고 a와 b와 c를 문자열로 인식해서 쭉 붙이는 겁니다.
tmp = new tmp as long 현재 tmp는 스트링형이므로 롱 형으로 바꿔줍니다.
이렇게 하시면 됩니다 -_-; 그러면 long형으로 tmp라는 변수에 입력이 됩니다.
그리고 다시 파일을 랜덤읽기로 읽으신 다음에 원하는
위치에 포인터를 위치시키고 WriteLine메서드를 사용해서 입력하시면 됩니다.
 

파일 이동, 복사, 삭제
FSO 개체 모델에는 파일을 이동하고 복사하고 삭제하기 위한 메서드가 각각 두 개씩 있습니다.
작업 메서드
파일 이동 File.Move 또는
FileSystemObject.MoveFile
파일 복사 File.Copy 또는
FileSystemObject.CopyFile
파일 삭제 File.Delete 또는
FileSystemObject.DeleteFile

예제
아래 예제는 C 드라이브의 루트 디렉터리에 텍스트 파일을 만들고 그 파일에 대한 정보를 작성하여 \tmp라는
디렉터리로 이동하고 \temp라는 디렉터리에 사본을 만들고 두 디렉터리 모두에서 사본들을 삭제합니다.
이 예제를 실행하려면 C 드라이브의 루트 디렉터리에 \temp 디렉터리와 \tmp 디렉터리가 있는지 확인하십시오.
Sub Manip_Files()
Dim fso as New FileSystemObject, txtfile, fil1, fil2
Set txtfile = fso.CreateTextFile("c:\testfile.txt", True)
MsgBox "파일을 씁니다."
' 한 줄을 씁니다.
txtfile.Write ("테스트용입니다.")
' 파일을 닫습니다.
txtfile.Close
MsgBox "파일을 c:\tmp에 이동합니다."
' C의 루트에 들어 있는 파일에 대하여 핸들을 가져옵니다.
Set fil1 = fso.GetFile("c:\testfile.txt")
' 파일을 \tmp 디렉터리로 이동합니다.
fil1.Move ("c:\tmp\testfile.txt")
MsgBox "파일을 c:\temp에 복사합니다."
' 파일을 \temp 디렉터리에 복사합니다.
fil1.Copy ("c:\temp\testfile.txt")
MsgBox "파일을 삭제합니다."
' 파일의 현재 위치에 대하여 핸들을 가져옵니다.
Set fil1 = fso.GetFile("c:\tmp\testfile.txt")
Set fil2 = fso.GetFile("c:\temp\testfile.txt")
' 파일을 삭제합니다.
fil1.Delete
fil2.Delete
MsgBox "작업이 모두 끝났습니다."
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
Public Function FileLineRead(strFile as String, ReadLine as Long) as String
    Dim FileNum As Integer
    Dim TextLine As String
    Dim i As Long
    If Len(Dir(strFile)) = 0 Then
        MsgBox "Sorry. No File.", vbInformation + vbOKOnly, "Message."
        Exit Function
    End If
   
    FileNum = FreeFile
    Open strFile For Input As #FileNum
    i=0
    Do While Not EOF(FileNum)
        i=i+1
        Line Input #FileNum, TextLine
        if i=ReadLine Then
             FileLineRead = TextLine
             Exit Function
        End if
    Loop
    Close #FileNum
    FileLineRead = ""
End Function
 
위 함수는 파일의 원하는 줄을 읽을수 있는 함수입니다.
다음과 같이 사용하세요.
 
A = FileLineRead("C;\Temp\Test.txt",3)
 
하시면 A라는 변수에 위에적힌 파일의 3번째 라인을 얻어올수 있습니다.
파일경로같은건 님이 원하시는대로 응용하시면 됩니다.
 
2. 두번째 읽어온 문자열 나눠 담기
나눠 담는데 변수를 a,b,c,d,e,f ... 하시는것 보다는 배열을 쓰시는것이 낫겠죠.
B(10) 이라고 하시고요. 아까 담은 A를 읽어오시려면 이렇게 하시면 됩니다.
B(1) = Mid(A,1,3)
B(2) = Mid(A,3,2)
이런식으로... 나눠 담으셔야합니다.
몇번째가 몇글자인지 정확히 저는 모르니까요.
위처럼 하시면 B(1) 에는 3글자가 B(2)에는 2글자가.....
담기게 됩니다.
 
3. 파일의 저장
위와같이 작업후 값을 바꾸시려면 B(1) = 500, B(2) = 90, B(3) = 2000 으로 바꼈습니다.
바뀐대로 작업하시려면 아래 함수를 이용하세요.
 
Public Sub FileLineWrite(strFile as String, WriteLine as Long, WriteData as String)
    Dim FileNum1 As Integer
    Dim FileNum2 As Integer
    Dim TextLine As String
    Dim FileNot As Boolean
    Dim i As Long

    If Len(Dir(strFile)) = 0 Then
         FileNot = True
    End If
   
    if Not FileNot Then
        FileNum1 = FreeFile
        Open strFile For Input As #FileNum1
        FileNum2 = FreeFile
        Open "tmpFile.txt" For Append As #FileNum2
        i=0
        Do While Not EOF(FileNum1)
            i=i+1
            Line Input #FileNum, TextLine
            if i=ReadLine Then
                 Print #FileNum2, WriteData
            Else
                 Print #FileNum2, TextLine
            End if
        Loop
        Close #FileNum1
        Close #FileNum2
        kill strFile
        filecopy "tmpFile.txt", strFile 
    Else
        FileNum2 = FreeFile
        Open strFile For Append As #FileNum2
        Print #FileNum2, WriteData
        Close #FileNum2 
    End if
End Function
 
이렇게 하시면 될듯 싶네요.
사용은
Dim i as Long
Dim tmpString as string
 
for i=0 to uBound(B)
tmpString = tmpString+B(i)
Next
 
하셔서 B에 있는 모든 문자열을 합하신 다음에
 
Call FileLineWrite("C;\Temp\Test.txt",3,tmpString)
 
하시면 됩니다.

댓글목록

등록된 댓글이 없습니다.

전체 95
게시물 검색
컴퓨터언어 목록
번호 제목 글쓴이 조회 날짜
75 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4525 02-17
74 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7038 02-17
73 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4585 02-11
72 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4447 02-11
71 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4337 02-07
70 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4321 08-04
69 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4478 12-25
68 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11588 12-25
67 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5439 12-24
66 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4871 12-24
열람중 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5105 12-20
64 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4934 12-20
63 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6299 12-20
62 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4895 12-20
61 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10185 12-19
60 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4745 12-17
59 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6779 12-17
58 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4642 12-16
57 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4401 12-16
56 VB no_profile 오원장 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4527 12-16