스트림(Stream)
- 파일 읽기, 쓰기 : 텍스트 파일
- 프로그램을 기준으로 내부에서 외부, 외부에서 내부로 데이터가 이동될때 데이터의 단위
- 데이터 흐름
- C#에서의 모든 입출력 단위
인코딩
- 문자 코드를 0과 1의 바이너리값을 가지는 연속된 비트 형태로 매핑시키는 작업
- 디코딩 : 인코딩
반대작업, 복원화
- ASCII : 7비트 사용, 총 128문자 표현
- ISO-8859-1 : 8비트 사용, 서유럽 문자 집합,
총 256문자 표현
- KS C 5601 : 한국 공업 표준, 2바이트 완성형 한글 표현, ASCII 제외
- EUC-KR : ASCII 문자코드 1바이트, 한글 2바이트
- Unicode : 2바이트 문자 코드 체계
- UTF-8 : ASCII 문자코드 1바이트, 다른
문자 2바이트 이상(한글
3바이트), 닷넷 기본 인코딩 방식
- UTF-16 : 모든 문자코드 2바이트
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;//
namespace ConsoleEx
{
//Ex117_Stream.cs
class Ex117_Stream
{
static void Main(string[]
args)
{
M1();
}
private static void M1()
{
//파일에 쓰기
//1. FileInfo 객체 생성하기
// - 현재 실행파일과 동일한 폴더의 memo.txt
FileInfo file = new
FileInfo(@"D:\김종현\memo.txt");
//D:\[01]CSharp\ConsoleEx\bin\Debug\memo.txt
//Console.WriteLine(file.FullName);
//2. 해당 파일에 읽거나 쓸수있는 스트림 열기
// - CreateText()로 만든 StreamWirter는 해당
파일이 없으면 새로 생성함!!
// - CreateText()로 만든 StreamWriter는 해당
파일이 있어도 덮어쓰기!!
// - AppendText()로 만든 StreamWrite는 해당 파일이
있으면 이어쓰기!!
// - AppendText()로 만든 StreamWirter는 해당
파일이 없으면 새로 생성함!!
// - 파일 열기
//StreamWriter writer =
file.CreateText();
StreamWriter writer = file.AppendText();
//3. 쓰기
// - 모든 입출력은 버퍼를 통해서 작업이 진행
//writer.Write();
//writer.WriteLine();
writer.WriteLine(DateTime.Now.ToString());
writer.WriteLine("안녕하세요~ 테스트입니다.");
//현재 출력버퍼에 쌓여있는 모든 내용을 실제파일 옮기고.. 버퍼를 비워라
//중간에 버퍼가 너무 쌓이면 버퍼를 비우는 용도
writer.Flush();
Console.ReadLine();
writer.WriteLine("추가 기록");
//4. 버퍼 -> 파일 옮겨적기
// - 파일 닫기
writer.Close();
//writer.WriteLine("추가 기록");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleEx
{
//Ex118_Stream.cs
class Ex118_Stream
{
static void Main(string[]
args)
{
//M1();
//M2();
M3();
}
private static void M3()
{
FileInfo file
= new FileInfo(@"D:\김종현\김종현.txt");
if (file.Exists)
{
StreamReader
reader = file.OpenText();
//읽은 데이터를 어딘가에 저장 -> 다시읽기
//1. 어딘가? -> 메모리 (배열) -> 속도 이득
//2. 메모리를 차지함(단점)
string
temp = reader.ReadLine();
Console.WriteLine(reader.ReadLine());
Console.WriteLine(reader.ReadLine());
Console.WriteLine(temp);
reader.Close();
//다시 읽기 용도의 스트림을 생성
//1. 메모리 공간을 차지x
//2. 비용 발생(무거움)
reader = file.OpenText();
Console.WriteLine(reader.ReadLine());
//요구사항 하나를 다시 읽고 싶음 첫번째라면, 한번
읽었던 라인을 다시 읽고 싶음
//결과 불가능
//내부적:Stream 텍스트 내용 보다 윗
줄에 책갈피가있다.
//readLine 결과 -> 커서가 한칸 라인으로 내려가고
그다음부턴 알어서 한칸씩 내려간다.
//없는곳까지 가서 null을 반환한다.
//Stream 방식은 전진 방식 밖에 없다. 커서를 다시
위로 올리는건 불가능
//★ 반드시 닫아 주도록 한다.
reader.Close();
}
}
{
FileInfo file = new
FileInfo(@"D:\김종현\김종현.txt");
if (file.Exists)
{
StreamReader reader = file.OpenText();
reader.ReadLine();
string
data = reader.ReadToEnd();
Console.WriteLine(data);
}
}
{
//읽기 - 파일이 없으면?
//1. 파일 객체 생성
FileInfo file = new
FileInfo(@"D:\김종현\김종현.txt");
if (file.Exists)
{
//2. 스트림 생성 - 읽기 위한 용도
StreamReader reader = file.OpenText();
//3. 읽기
// - 텍스트파일의 한줄을 읽어서 string 반환
//string data =
reader.ReadLine();
//Console.WriteLine(data);
//data =
reader.ReadLine();//두번째 줄
//Console.WriteLine(data);
//data =
reader.ReadLine();//세번째 줄
//Console.WriteLine(data);
//data =
reader.ReadLine();//네번째 줄
//Console.WriteLine(data
== null);
string
data = "";
while
((data = reader.ReadLine()) != null)
{
Console.WriteLine(data);
}
}