연습: .NET Framework 메서드를 사용하여 파일 조작

업데이트: 2007년 11월

이 연습에서는 StreamReader 클래스를 사용하여 파일을 열어서 읽고, 파일 액세스 여부를 확인하고, StreamReader 클래스의 인스턴스로 파일 읽기 권한 내에서 문자열을 검색하고, StreamWriter 클래스를 사용하여 파일에 쓰는 방법을 보여 줍니다.

참고:

대화 상자에서 사용할 수 있는 옵션과 메뉴 명령의 이름 및 위치는 실제 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 이 도움말 페이지는 일반 개발 설정을 염두에 두고 작성되었습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

응용 프로그램 만들기

Visual Studio를 시작하고 사용자가 지정된 파일에 쓰는 데 사용할 수 있는 폼을 만들어 프로젝트를 시작합니다.

프로젝트를 만들려면

  1. 파일 메뉴에서 새 프로젝트를 선택합니다.

  2. 새 프로젝트 창에서 Windows 응용 프로그램을 클릭합니다.

  3. 이름 상자에 MyDiary를 입력하고 확인을 클릭합니다.

    프로젝트가 Visual Studio솔루션 탐색기에 추가되고 Windows Forms 디자이너가 열립니다.

  4. 다음 표에 나온 컨트롤을 폼에 추가하고 속성에 해당 값을 설정합니다.

    개체

    속성

    Button

    Name

    Text

    Submit

    Submit Entry

    Button

    Name

    Text

    Clear

    Clear Entry

    TextBox

    Name

    Text

    Multiline

    Entry

    Please enter something.

    False

파일에 쓰기

응용 프로그램을 통해 파일에 쓸 수 있는 기능을 추가하려면 StreamWriter 클래스를 사용합니다. StreamWriter는 문자를 특정 인코딩으로 출력하기 위한 것이고 Stream 클래스는 바이트를 입력 및 출력하기 위한 것입니다. 표준 텍스트 파일에 여러 줄의 정보를 쓰려는 경우에는 StreamWriter를 사용합니다. StreamWriter 클래스에 대한 자세한 내용은 StreamWriter 클래스를 참조하십시오.

쓰기 기능을 추가하려면

  1. 보기 메뉴에서 코드를 선택하여 코드 편집기를 엽니다.

  2. 응용 프로그램에서는 System.IO 네임스페이스를 참조하므로 코드 맨 앞에서 Public Class Form1로 시작하는 폼 클래스 정의 앞에 다음 문을 추가합니다.

    Imports System
    Imports System.IO
    

    파일에 쓰기 전에 StreamWriter 클래스의 인스턴스를 만들어야 합니다.

  3. 보기 메뉴에서 디자이너를 선택하여 Windows Forms 디자이너로 돌아갑니다. Submit 단추를 두 번 클릭하여 단추에 대한 Click 이벤트 처리기를 만든 후 다음 코드를 추가합니다.

    Dim fw As StreamWriter
    
참고:

Visual Studio IDE(통합 개발 환경)는 코드 편집기로 되돌아가고 삽입 지점은 코드를 추가할 이벤트 처리기 내에 놓이게 됩니다.

  1. 파일에 쓰려면 StreamWriter 클래스의 Write 메서드를 사용합니다. Dim fw As StreamWriter 바로 뒤에 다음 코드를 추가합니다. 파일이 아직 없으면 자동으로 만들어지므로 파일이 없을 경우 예외가 throw될 것을 걱정할 필요는 없습니다.

    Dim ReadString As String
    Try
        'Pass the file path and name to the StreamWriter constructor.
        'Indicate that Append is True, so file will not be overwritten.
        fw = New StreamWriter("C:\MyDiary.txt", True)
        ReadString = Entry.Text
        fw.WriteLine(ReadString)
    Finally
        'Close the file.
        fw.Close()
    End Try
    
  2. 사용자가 빈 항목을 전송할 수 없도록 Dim ReadString As String 바로 뒤에 다음 코드를 추가합니다.

    If (Entry.Text = "" Or Entry.Text = "Please enter something.") Then
        Entry.Text = "Please enter something."
        Return
    End If
    
  3. 이 파일은 일기이므로 사용자는 각 항목에 날짜를 지정하고자 할 것입니다. fw = New StreamWriter("C:\MyDiary.txt", True) 뒤에 다음 코드를 삽입하여 변수 Today를 현재 날짜로 설정합니다.

    Dim Today As DateTime
    Today = Now
    fw.Write(CStr(Today))
    fw.Write(ControlChars.CrLf)
    
  4. 마지막으로 TextBox를 지우는 코드를 추가합니다. 다음 코드를 Clear 단추의 Click 이벤트에 추가합니다.

    Entry.Text = ""
    

일기에 표시 기능 추가

이 단원에서는 최근 항목을 DisplayEntryTextBox에 표시하는 기능을 추가합니다. 다양한 항목을 표시하여 사용자가 DisplayEntryTextBox에 표시할 항목을 선택할 수 있도록 하는 ComboBox를 추가할 수도 있습니다. StreamReader 클래스의 인스턴스는 MyDiary.txt를 읽습니다. StreamWriter 클래스와 마찬가지로 StreamReader는 텍스트 파일에 사용하기 위한 것입니다.

이 연습 단원에서는 다음 표에 있는 컨트롤을 폼에 추가하고 속성에 해당 값을 설정합니다.

컨트롤

속성

TextBox

Name

Visible

Size

Multiline

DisplayEntry

False

120,60

True

Button

Name

Text

Display

Display

Button

Name

Text

GetEntries

Get Entries

ComboBox

Name

Text

Enabled

PickEntries

Select an Entry

False

콤보 상자를 채우려면

  1. PickEntriesComboBox는 사용자가 각 항목을 전송한 날자를 표시하는 데 사용되므로 사용자는 특정 날짜에서 항목을 선택할 수 있습니다. GetEntries 단추에 대한 Click 이벤트 처리기를 만들고 다음 코드를 추가합니다.

    Dim fr As StreamReader
    Dim FileString As String
    FileString = ""
    Try
        fr = New System.IO.StreamReader("C:\MyDiary.txt")
        PickEntries.Items.Clear()
        PickEntries.Enabled = True
        Do
            FileString = fr.ReadLine
            If IsDate(FileString) Then
                PickEntries.Items.Add(FileString)
            End If
        Loop Until (FileString Is Nothing)
    Finally
        If fr IsNot Nothing Then
            fr.Close()
        End If
    End Try
    PickEntries.Enabled = True
    
  2. 코드를 테스트하려면 F5 키를 눌러 응용 프로그램을 컴파일한 다음 Get Entries를 클릭합니다. ComboBox의 드롭다운 화살표를 클릭하여 항목 날짜를 표시합니다.

개별 항목을 선택하여 표시하려면

  1. Display 단추에 대한 Click 이벤트 처리기를 만들고 다음 코드를 추가합니다.

    Dim fr As StreamReader
    Dim ReadString As String
    'Make sure ReadString begins empty.
    ReadString = ""
    Dim FileString As String
    fr = New StreamReader("C:\MyDiary.txt")
    'If no entry has been selected, show the whole file.
    If PickEntries.Enabled = False Or PickEntries.SelectedText Is Nothing Then
        Do
            'Read a line from the file into FileString.
            FileString = fr.ReadLine
            'add it to ReadString
            ReadString = ReadString & ControlChars.CrLf & FileString
        Loop Until (FileString = Nothing)
    Else
        'An entry has been selected, find the line that matches.
        Do
    
            FileString = fr.ReadLine
        Loop Until FileString = CStr(PickEntries.SelectedItem)
        FileString = CStr(PickEntries.SelectedItem) & ControlChars.CrLf
        ReadString = FileString & fr.ReadLine
    
        'Read from the file until EOF or another Date is found.
        Do Until ((fr.Peek < 0) Or (IsDate(fr.ReadLine)))
            ReadString = ReadString & fr.ReadLine
        Loop
    End If
    fr.Close()
    DisplayEntry.Visible = True
    DisplayEntry.Text = ReadString
    
  2. 코드를 테스트하려면 F5 키를 눌러 응용 프로그램을 컴파일한 후 항목을 전송합니다. Get Entries를 클릭하고 ComboBox에서 항목을 선택한 다음 Display를 클릭합니다. 선택한 항목의 내용이 DisplayEntryTextBox에 나타납니다.

사용자가 항목을 삭제하거나 수정할 수 있도록 만들기

마지막으로, DeleteEntry 및 EditEntry 단추를 사용하여 사용자가 항목을 삭제하거나 수정할 수 있는 기능을 추가할 수 있습니다. 항목이 표시되어 있지 않으면 두 단추 모두 사용할 수 없습니다.

다음 표에 나온 컨트롤을 폼에 추가하고 속성에 해당 값을 설정합니다.

컨트롤

속성

Button

Name

Text

Enabled

DeleteEntry

Delete Entry

False

Button

Name

Text

Enabled

EditEntry

Edit Entry

False

Button

Name

Text

Enabled

SubmitEdit

Submit Edit

False

항목의 삭제와 수정을 가능하게 하려면

  1. 다음 코드를 Display 단추의 Click 이벤트에서 DisplayEntry.Text = ReadString 바로 다음에 추가합니다.

    DeleteEntry.enabled = True
    
  2. DeleteEntry 단추에 대한 Click 이벤트 처리기를 만들고 다음 코드를 추가합니다.

    Dim fr As StreamReader
    Dim ReadString As String
    Dim WriteString As String
    Dim ConfirmDelete As MsgBoxResult
    fr = New StreamReader("C:\MyDiary.txt")
    ReadString = fr.ReadLine
    ' Read through the textfile
    Do Until (fr.Peek < 0)
        ReadString = ReadString & vbCrLf & fr.ReadLine
    Loop
    WriteString = Replace(ReadString, DisplayEntry.Text, "")
    fr.Close()
    ' Check to make sure the user wishes to delete the entry
    ConfirmDelete = MsgBox("Do you really wish to delete this entry?", _
      MsgBoxStyle.OKCancel)
    If ConfirmDelete = MsgBoxResult.OK Then
        File.Delete("C:\MyDiary.txt")
        Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt")
        fw.WriteLine(WriteString)
        fw.Close()
        ' Reset controls on the form
        DisplayEntry.Text = ""
        PickEntries.Text = ""
        PickEntries.Items.Clear()
        PickEntries.Enabled = False
        DeleteEntry.Enabled = False
    End If
    
  3. 사용자가 항목을 표시하면 EditEntry 단추를 사용할 수 있게 됩니다. 다음 코드를 Display 단추의 Click 이벤트에서 DisplayEntry.Text = ReadString 바로 다음에 추가합니다.

    EditEntry.Enabled = True
    
  4. EditEntry 단추에 대한 Click 이벤트 처리기를 만들고 다음 코드를 추가합니다.

    Entry.Text = DisplayEntry.Text
    SubmitEdit.Enabled = True
    
  5. SubmitEdit 단추에 대한 Click 이벤트 처리기를 만들고 다음 코드를 추가합니다.

    Dim fr As StreamReader
    Dim ReadString As String
    Dim WriteString As String
    If Entry.Text = "" Then
        MsgBox("Use Delete to Delete an Entry")
        Return
    End If
    fr = New StreamReader("C:\MyDiary.txt")
    ReadString = fr.ReadLine
    Do Until (fr.Peek < 0)
        ReadString = ReadString & vbCrLf & fr.ReadLine
    Loop
    WriteString = Replace(ReadString, DisplayEntry.Text, Entry.Text)
    fr.Close()
    File.Delete("C:\MyDiary.txt")
    Dim fw As StreamWriter = File.CreateText("C:\MyDiary.txt")
    fw.WriteLine(WriteString)
    fw.Close()
    DisplayEntry.Text = Entry.Text
    Entry.Text = ""
    EditEntry.Enabled = False
    SubmitEdit.Enabled = False
    

코드를 테스트하려면 F5 키를 눌러 응용 프로그램을 컴파일합니다. Get Entries를 클릭하고 항목을 선택한 다음 Display를 클릭합니다. DisplayEntryTextBox에 항목이 나타납니다. Edit Entry를 클릭합니다. EntryTextBox에 항목이 나타납니다. EntryTextBox의 항목을 편집하고 Submit Edit를 클릭합니다. MyDiary.txt 파일을 열어 수정한 내용을 확인합니다. 이제 항목을 선택하고 Delete Entry를 클릭합니다. MessageBox에서 확인을 요청하면 OK를 클릭합니다. 응용 프로그램을 닫고 MyDiary.txt를 열어 해당 항목이 삭제되었는지 확인합니다.

참고 항목

참조

StreamReader

StreamWriter

기타 리소스

Visual Basic 언어 연습