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

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

참고 항목

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 IDE 개인 설정을 참조하세요.

애플리케이션 작성

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

프로젝트를 만들려면

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

  2. 새 프로젝트 창에서 Windows 애플리케이션을 클릭합니다.

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

    Visual Studio에서 솔루션 탐색기에 프로젝트를 추가합니다. 그러면 Windows Forms 디자이너가 열립니다.

  4. 다음 표의 컨트롤을 양식에 추가하고 속성의 해당 값을 설정합니다.

Object 속성
Button 이름

Text
Submit

항목 제출
Button 이름

Text
Clear

항목 지우기
TextBox 이름

Text

여러 줄
Entry

내용을 입력하세요.

False

파일에 쓰기

애플리케이션을 통해 파일에 쓰는 기능을 추가하려면 StreamWriter 클래스를 사용합니다. StreamWriter는 특정 인코딩에서 문자 출력용으로 설계된 반면, Stream 클래스는 바이트 입력 및 출력용으로 설계되었습니다. 표준 텍스트 파일에 정보의 줄을 쓰려면 StreamWriter를 사용합니다. StreamWriter 클래스에 대한 자세한 내용은 StreamWriter을 참조하세요.

쓰기 기능을 추가하려면

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

  2. 애플리케이션은 System.IO 네임스페이스를 참조하므로 다음 문을 코드의 시작 부분(Public Class Form1을 시작하는 양식에 대한 클래스 선언 전)에 추가합니다.

    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 이름

Visible

크기

여러 줄
DisplayEntry

False

120,60

True
Button 이름

Text
Display

표시
Button 이름

Text
GetEntries

항목 가져오기
ComboBox 이름

Text

활성화
PickEntries

항목 선택

False

콤보 상자를 채우려면

  1. PickEntriesComboBox는 사용자가 특정 날짜의 항목을 선택할 수 있도록 사용자가 각 항목을 제출하는 날짜를 표시하는 데 사용됩니다. GetEntries 단추에 대한 Click 이벤트 처리기를 만들어 다음 코드를 추가합니다.

    Dim fr As StreamReader = Nothing
    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를 눌러 애플리케이션을 컴파일한 다음 항목 가져오기를 클릭합니다. 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를 눌러 애플리케이션을 컴파일한 다음 항목을 제출합니다. 항목 가져오기를 클릭하고 ComboBox에서 항목을 선택한 다음, 표시를 클릭합니다. 선택한 항목의 내용이 DisplayEntryTextBox에 표시됩니다.

사용자가 항목을 삭제 또는 수정하도록 설정

마지막으로 DeleteEntryEditEntry 단추를 사용하여, 사용자가 항목을 삭제 또는 수정하도록 설정하는 추가 기능을 포함할 수 있습니다. 항목이 표시되지 않으면 두 단추 모두 비활성화됩니다.

다음 표의 컨트롤을 양식에 추가하고 속성의 해당 값을 설정합니다.

제어 속성
Button 이름

Text

활성화
DeleteEntry

항목 삭제

False
Button 이름

Text

활성화
EditEntry

항목 편집

False
Button 이름

Text

활성화
SubmitEdit

편집 제출

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를 눌러 애플리케이션을 컴파일합니다. 항목 가져오기를 클릭하고 항목을 선택한 다음 표시를 클릭합니다. 항목이 DisplayEntryTextBox에 나타납니다. 항목 편집을 클릭합니다. 항목이 EntryTextBox에 나타납니다. EntryTextBox에서 항목을 편집하고 편집 제출을 클릭합니다. MyDiary.txt 파일을 열어 수정한 내용을 확인합니다. 이제 항목을 선택하고 항목 삭제를 클릭합니다. MessageBox에 확인을 요청하는 메시지가 표시되면 확인을 클릭합니다. 애플리케이션을 닫고 MyDiary.txt를 열어 삭제를 확인합니다.

참고 항목