🐣 목차
- 스트림(Stream)
- 직렬화(Serialize)
- 정리
01. 파일스트림(file stream)
🟦 스트림 개요
■ 스트림(stream)이란?
파일, 네트워크 등에서 데이터를 바이트 단위로 읽고 쓰는 클래스
■ Stream class 는 상위 기본 클래스임
- 상속클래스들
FileStream, MemoryStream, NetworkStream, SqlFileStream등
■ using System.IO 선언
🟦파일 스트림 FileStream
■ FileStream?
파일입출력을 다루는 기본 클래스
System.Object
+ System.MarshalByRefObject
+ System.IO.Stream
+ System.IO.FileStream
■ byte[] 배열로 데이터를 읽거나 저장함 → 형변환이 요구됨
(모든 데이터의 흐름은 바이트구나! 그런 바이트를 순차적으로 읽어내거나 저장하기 위해서 배열형태를 사용하는구나!
파일 입출력의 데이터 기본 단위는바이트!
C#에서는 유니코드를 사용하기 때문에 전부 2byte)
■ StreamWriter/StreamReader (텍스트들을 읽고 저장하는 역할)
+ BinaryWriter/BinaryReader(이진파일을 읽고 저장하는 역할, 임의의 형태)와 사용
■ 파일 정보 설정에 사용
public FileStream (
string path, //경로
FileMode mode,
FileAccess access
)
■ FileMode 열거형
Append, Create, CreateNew Open, OpenOrCreate, Truncate
■ FileAcccess 열거형
Read, ReadWrite, Write
(FileStream에서 객체 생성할 때 FileMode와 FileAcccess 셋팅하고, 그걸 StreamWriter/StreamReader 또는 BinaryWriter/BinaryReader에 넘기는 것)
🟦 텍스트 파일처리
■ StreamWriter, StreamReader
■ 텍스트 파일의 특징
- 기본단위 : 1바이트
- 아스키코드 기반
■ 아스키코드를 유니코드로 인코딩 (C#에서는 유.니.코.드)
🟦 StreamWriter
■ 역할: 파일쓰기
■ 상속 계층 구조
System.Object
+System.MarshalByRefObject
+System.IO.TextWriter
+ System.IO.StreamWriter
■ public class StreamWriter : TextWriter
■ 객체 생성과 해제
static void Main(string[] args)
{
FileStream fs = new FileStream("test.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
...
sw.Close();
}
■ using 문 : 호출한 객체의 실행이 끝난 후 자동 close 호출
FileStream fs = new FileStream("test.txt", FileMode.Create);
using (StreamWriter sw = new StreamWriter(fs)
{
//파일 입출력 처리
}
static void Main(string[] args)
{
int value = 12;
float value2 = 3.14f;
string str1 = "향기를 쫒아가라!";
FileStream fs = new FileStream("test.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(value);
sw.WriteLine(value2);
sw.WriteLine(str1);
sw.Close();
}
위의 코드를 using 구문을 이용해서 쓰기
static void Main(string[] args)
{
int value = 12;
float value2 = 3.14f;
string str1 = "향기를 쫒아가라!";
using (StreamWriter sw = new StreamWriter(new FileStream("test1.txt", FileMode.Create)))
{
sw.WriteLine(value);
sw.WriteLine(value2);
sw.WriteLine(str1);
}
}
streamWrite 이용해서 코드 보기
static void Main(string[] args)
{
int value = 12;
float value2 = 3.14f;
string str1 = "향기를 쫒아가라!";
StreamWriter sw = new StreamWriter("test.txt");
sw.WriteLine(value);
sw.WriteLine(value2);
sw.WriteLine(str1);
sw.Close();
}
🟦StreamReader
■ 역할: 파일 읽기
■ 상속 계층 구조
System.Object
+ System.MarshalByRefObject
+ System.IO.TextReader
+ System.IO.StreamReader
■ public class StreamReader : TextReader
■ 읽기 메서드: Read(), ReadLine(), string ReadLine()
■ FileStream과 StreamReader를 같이 사용하는 예시코드
static void Main(string[] args)
{
FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
int value = int.Parse(sr.ReadLine());
float value2 = float.Parse(sr.ReadLine());
string str1 = sr.ReadLine();
sr.Close();
Console.WriteLine("{0} {1} {2}", value, value2, str1);
}
■ StreamReader와 using문을 사용하는 예
static void Main(string[] args)
{
using (StreamReader sr = new StreamReader(new FileStream("test.txt", FileMode.Open)))
{
int value = int.Parse(sr.ReadLine());
float value2 = float.Parse(sr.ReadLine());
string str1 = sr.ReadLine();
Console.WriteLine("{0} {1} {2}", value, value2, str1);
}
}
■ StreamReader만을 사용한 예
static void Main(string[] args)
{
StreamReader sr = new StreamReader("test.txt");
int value = int.Parse(sr.ReadLine());
float value2 =float.Parse(sr.ReadLine());
string str = sr.ReadLine();
Console.WriteLine("{0},{1},{2}",value,value2, str);
}
'C#' 카테고리의 다른 글
[C# 기초공부] 배열(3) 배열을 리턴하는 함수 / 배열의 메서드들 (2) | 2023.01.06 |
---|---|
[C# 기초공부] 배열(2) 가변 배열 (0) | 2023.01.06 |
[C# 기초공부] 배열(1) 일차원배열과 다차원배열 (0) | 2023.01.06 |
[C# 기초공부] 점프문(goto, continue, return, break)/ 예외 처리문(if~else)(try~catch)(try~finally)(throw) (0) | 2023.01.06 |
[C# 기초공부] 선택문 (if~else)(switch, case) (0) | 2023.01.04 |