파일 정보와 디렉터리 정보 다루기

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

+ Recent posts