다음을 통해 공유


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

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

비고

컴퓨터는 다음 지침에서 Visual Studio 사용자 인터페이스 요소 중 일부에 대해 다른 이름 또는 위치를 표시할 수 있습니다. 가지고 있는 Visual Studio 버전과 사용하는 설정에 따라 이러한 요소가 결정됩니다. 자세한 내용은 IDE 개인 설정참조하세요.

애플리케이션 작성

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

프로젝트를 만들려면

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

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

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

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

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

객체 속성
Button 이름

문자 메시지
Submit

항목 제출
Button 이름

문자 메시지
Clear

항목 지우기
TextBox 이름

문자 메시지

여러 줄
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. 파일에 쓰려면 Write 클래스의 StreamWriter 메서드를 사용하십시오. 바로 다음에 다음 코드를 Dim fw As StreamWriter추가합니다. 파일이 존재하지 않는 경우 생성되므로 파일을 찾을 수 없어 예외가 발생할 것을 걱정할 필요가 없습니다.

    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표시하는 기능을 추가합니다. 사용자가 항목을 선택하여 ComboBoxDisplayEntry에 표시할 수 있도록 다양한 항목을 표시하는 TextBox를 추가할 수도 있습니다. 클래스의 인스턴스가 StreamReader에서 MyDiary.txt를 읽습니다. 클래스 StreamWriterStreamReader 마찬가지로 텍스트 파일과 함께 사용하기 위한 것입니다.

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

제어 속성 가치들
TextBox 이름

보이는

크기

여러 줄
DisplayEntry

False

120,60

True
Button 이름

문자 메시지
Display

표시
Button 이름

문자 메시지
GetEntries

항목 가져오기
ComboBox 이름

문자 메시지

활성화됨
PickEntries

항목 선택

False

콤보 상자를 채우려면

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

    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. 단추에 Click 대한 Display 이벤트 처리기를 만들고 다음 코드를 추가합니다.

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

문자 메시지

활성화됨
DeleteEntry

항목 삭제

False
Button 이름

문자 메시지

활성화됨
EditEntry

항목 편집

False
Button 이름

문자 메시지

활성화됨
SubmitEdit

편집 제출

False

항목 삭제 및 수정을 사용하도록 설정하려면

  1. Display 버튼의 Click 이벤트에, DisplayEntry.Text = ReadString 다음 코드를 추가합니다.

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

    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 활성화됩니다. 다음 코드를 Click 다음에 Display 버튼의 DisplayEntry.Text = ReadString 이벤트에 추가합니다.

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

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

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

참고하십시오