파일 정보와 디렉터리 정보 다루기
File : 컴퓨터에 저장되는 데이터의 묶음
Directory : 파일이 위치하는 공간. (폴더)
네임스페이스 | using System.IO |
File | 파일의 생성, 복사, 삭제, 이동, 조회를 처리하는 정적 메소드를 제공 |
FileInfo | File 클래스와 동일하나 정적 메소드 대신 인스턴스 메소드를 제공 |
Directory | 디렉터리의 생성, 복사, 삭제, 이동, 조회를 처리하는 정적 메소드 |
DirectoryInfo | Directory 클래스와 동일하나 정적 메소드 대신 인스턴스 메소드를 제공 |
스트림
메모리와 저장매체를 연결하는 통로.
데이터는 메모리와 저장매체 사이를 이동할 때 스트림이라는 공간을 통해 이동한다.
System.IO.Stream
using 선언
using을 선언하여 작업의 실수(대표적으로 스트림 닫기의 누락)를 줄일 수 있다.
파일 스트림을 열 때 using을 선언을 통해 생성된 Stream은 블록 범위가 끝나면서 Dispose()를 호출하여 닫아준다.
{
using Stream outStream = new FileStream();
} // 블록 범위가 끝나면 닫아준다.
using(Stream outStream = newFileStream())
{
} // 블록 범위가 끝나면 닫아준다.
데이터
BinaryWriter / BinaryReader | StreamWriter / StreamReader |
이진 데이터 형태로 쓰기 / 읽기 | 텍스트 형태로 쓰기 / 읽기 |
직렬화
직렬화는 객체의 상태를 메모리나 영구 저장 장치에 저장이 가능한 0과 1의 순서로 바꾸는 것을 이야기한다.
스트림을 통해 데이터를 보내고 저장하기 위해서는 데이터를 이진 형태로 변환을 해야 한다.
C#에서는 기본 타입은 변환을 지원하나 구조체나 클래스 타입은 변환을 지원하지 않기 때문에 직렬화를 한다.
using System;
[Serializable]
public class PlayerData
{
public int Level = 0;
[NonSerialized]
public int nowStage = 0; // 직렬화되지 않는다.
}
C#에서는 클래스 앞에 [Serializable]를 선언하는 것으로 클래스나 구조체를 직렬화를 할 수 있다.
클래스 내부에 직렬화를 원하지 않는 부분이 있다면 [NonSerialized]를 선언하여 제외시킬 수 있다.
Stream rs = new FileStream("a.dat", FileMode.Open);
BinaryFormatter deserializer = new BinaryFormatter();
MyClass obj = (MyClass)deserializer.Deserialize(rs);
rs.Close;
- 직렬화된 데이터를 받아올 때는 역직렬화를 통해 받아온다.
728x90
'Program > C (C++,C#)' 카테고리의 다른 글
[C#] Property (0) | 2022.08.16 |
---|---|
[C#] 대리자와 이벤트 (0) | 2022.08.11 |
[C++] 해시 테이블 (0) | 2022.07.06 |
[C++] 힙 (Heap) (0) | 2022.07.06 |
[C++] 트리 (0) | 2022.07.06 |