C# Winform을 활용하여
1. 텍스트박스의 내용을 저장하거나
2. 파일을 읽어 텍스트박스에 넣어보겠습니다.
일단 Winform .NET Framework 프로젝트를 생성해 주고,
Form 디자인은 다음과 같이 했습니다.
- txt : TextBox
- btnOpenFile : Button
- btnSaveFile : Button
그리고 각 버튼에 Click 이벤트를 등록해 주고, 다음과 같이 입력합니다.
OpenFileDialog
: 사용자가 파일을 열도록 요청하는 표준 대화 상자를 표시합니다.
- ofd.ShowDialog() : 파일 선택창 열기
- DialogResult.OK : 열 파일 선택 완료
- ofd.FileName : 파일 대화 상자에서 선택한 파일 이름을 포함하는 파일 경로 문자열
StreamReader
: 특정 인코딩의 바이트 스트림에서 문자를 읽는 TextReader를 구현합니다.
- sr.EndOfStream : 현재 스트림의 위치가 스트림의 끝에 있으면 true, 없으면 false. 파일 끝까지 읽었는지 아닌지 체크하기 위해 사용.
- sr.ReadLine() : 현재 스트림에서 한 줄의 문자를 읽고 데이터를 문자열로 변환합니다.
SaveFileDialog
: 파일을 저장할 위치를 선택하라는 메시지입니다.
- sfd.ShowDialog() : 파일 위치 선택창 열기
- DialogResult.OK : 파일 저장 위치 선택 완료
- sfd.FileName : 파일 대화 상자에서 선택한 파일 이름을 포함하는 파일 경로 문자열
StreamWriter
: 구현하는 TextWriter 특정 인코딩의 스트림에 문자를 작성합니다.
- sr.WriteLine("text") : 문자열과 줄 종결자를 차례로 텍스트 문자열 또는 스트림에 씁니다.
* using(...) { } 구문을 사용하면, 해당 블록에서 스트림 객체를 사용하고 블록이 끝나면 할당된 객체를 자동으로 Dispose 해제해 줍니다.
텍스트 파일 저장하기.
텍스트 파일 읽기.
CSV 파일 저장하기.
CSV 파일 읽기.
* 주의사항 *
위의 코드에서
StreamReader sr = new StreamReader(ofd.FileName),
StreamWriter sw = new StreamWriter(sfd.FileName)을 그대로 사용하면,
CSV 사용 시 Encoding이 정해지지 않아 위 사진들과 같이 한글이 깨지는 현상이 있습니다.
따라서 다음과 같이 StreamReader, StreamWriter 객체 생성 시 인코딩을 따로 지정해줘야 합니다.
StreamReader sr = new StreamReader(ofd.FileName, Encoding.Default)
StreamWriter sw = new StreamWriter(sfd.FileName, true, Encoding.Default)
다시 실행하면 위와 같이 한글이 깨지지 않고 잘 나옵니다.
전체 코드.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace OpenSaveFile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnOpenFile_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
using (StreamReader sr = new StreamReader(ofd.FileName, Encoding.Default))
{
string data = "";
while (!sr.EndOfStream)
{
data += sr.ReadLine() + "\r\n";
}
txt.Text = data;
}
}
}
private void btnSaveFile_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == DialogResult.OK)
{
using (StreamWriter sw = new StreamWriter(sfd.FileName, true, Encoding.Default))
{
sw.WriteLine(txt.Text);
}
}
}
}
}
|
cs |