보라코딩

WPF 텍스트 파일 읽기/쓰기 본문

코딩/C#

WPF 텍스트 파일 읽기/쓰기

new 보라 2023. 9. 7. 17:53
텍스트 파일 읽기 (RichText, Stream Reader)

 

 .xaml
<Window x:Class="파일읽기.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:파일읽기"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBox x:Name="txtPath" HorizontalAlignment="Left" Margin="141,145,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="258"/>
        <Button x:Name="btnFile" Click="btnFile_Click" Content="파일선택" HorizontalAlignment="Left" Margin="428,144,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.368,-0.076" Width="62" Height="19"/>
        <Button x:Name="btnRead" Click="btnRead_Click" Content="파일읽기" HorizontalAlignment="Left" Margin="184,197,0,0" VerticalAlignment="Top" Height="20" Width="58"/>
        <Button x:Name="btnDelete" Click="btnDelete_Click" Content="삭제" HorizontalAlignment="Left" Margin="310,197,0,0" VerticalAlignment="Top" Width="39"/>
        <RichTextBox Margin="142,261,400,49" Name="richTxt">
            <FlowDocument>
                <Paragraph>
                    <Run Text="RichTextBox"/>
                </Paragraph>
            </FlowDocument>
        </RichTextBox>

    </Grid>
</Window>

 

 

 

 

 .xaml.cs
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
using System.IO;

namespace 파일읽기
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnFile_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            if(openFileDialog.ShowDialog() == true)
            {
                txtPath.Text = openFileDialog.FileName;
            }
        }

        private void btnRead_Click(object sender, RoutedEventArgs e)
        {
            if (File.Exists(txtPath.Text))
            {
                using(StreamReader sr = new StreamReader(txtPath.Text)) 
                {
                    richTxt.Document.Blocks.Clear();
                    richTxt.AppendText(sr.ReadToEnd()); 
                }
            }
            else
            {
                MessageBox.Show("파일이 없어요", "에러", MessageBoxButton.OK);
            }
        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            richTxt.Document.Blocks.Clear();
        }
    }
}

 

 





텍스트 파일 쓰기 (RichText, Stream Writer)
.xaml
<Window x:Class="파일쓰기.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:파일쓰기"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <RichTextBox Margin="107,150,187,71" Name="richTxt">
            <FlowDocument>
                <Paragraph>
                    <Run Text="RichTextBox"/>
                </Paragraph>
            </FlowDocument>
        </RichTextBox>
        <Button Content="저장" Name="btnSave" Click="btnSave_Click" HorizontalAlignment="Left" Margin="345,87,0,0" VerticalAlignment="Top" Width="55" Height="22"/>

    </Grid>
</Window>

 

 .xaml.cs
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace 파일쓰기
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "Text File(*.txt)|*.txt|XML File(*.xml)|*.xml|Json File (x.jons)| *.json";
            if(saveFileDialog.ShowDialog() == true)
            {
                using(StreamWriter sw = new StreamWriter(saveFileDialog.FileName))
                {
                    TextRange textRange = new TextRange(richTxt.Document.ContentStart, richTxt.Document.ContentEnd);
                    sw.WriteLine(textRange.Text);
                }
                MessageBox.Show("파일 저장되었습니다");
            }
        }
    }
}