본문 바로가기

프로그램/유니티 C# 강좌

[유니티 C# 강좌] 24. 파일 입출력

728x90
반응형

1. 파일 입출력 클래스

 

파일과 디렉터리 관련 네임스페이스로 System.IO가 있습니다.

 

네임 스페이스
using System.IO;

 

1.1 파일 및 디렉터리

 

다음은 주요 파일 및 디렉터리 클래스입니다.

 

클래스 내용
File 파일 만들기, 복사, 삭제, 이동 및 열기를 위한 정적 메서드를 제공하고 FileStream 개체 만들기를 지원합니다.
FileInfo 파일 만들기, 복사, 삭제, 이동 및 열기를 위한 인스턴스 메서드를 제공하고 FileStream 개체 만들기를 지원합니다.
Directory 디렉터리와 하위 디렉터리를 통해 만들고, 이동하고, 열거하기 위한 정적 메서드를 제공합니다.
DirectoryInfo 디렉터리와 하위 디렉터리를 통해 만들고, 이동하고, 열거하기 위한 인스턴스 메서드를 제공합니다.
Path 플랫폼 간에 호환되는 방식으로 디렉터리 문자열을 처리하기 위한 메서드와 속성을 제공합니다.

 

 

1.2 스트림(Stream)

 

스트림은 바이트 읽기 및 쓰기를 지원합니다.

 

스트림에는 다음의 세 가지 기본 작업이 포함됩니다.

 

작업 내용
읽기 스트림의 데이터를 바이트 배열과 같은 데이터 구조로 전송합니다.
쓰기 데이터 소스에서 스트림으로 데이터를 전송합니다.
검색 스트림 내에서 현재 위치를 쿼리하고 수정합니다.

 

 

스트림 주요 클래스는 다음과 같습니다.

 

주요 클래스 내용
FileStream 파일을 읽고 쓰는 데 사용됩니다.
MemoryStream 메모리를 백업 저장소로 읽고 여기에 기록하는 데 사용됩니다.
BufferedStream 읽기 및 쓰기 작업의 성능을 향상시키는 데 사용됩니다.
NetworkStream 네트워크 소켓을 통한 읽기 및 쓰기를 지원합니다.

 

 

1.3 Reader, Writer

 

주요 클래스 내용
BinaryReader
BinaryWriter
기본 데이터 형식을 바이너리 값으로 읽고 쓰는 데 사용됩니다.
StreamReader
StreamWriter
인코딩 값을 사용하여 바이트에서 문자, 문자에서 바이트로 변환함으로써 문자를 읽고 쓰는 데 사용됩니다.
StringReader
StringWriter
문자열에서 문자를, 문자에서 문자열을 읽고 쓰는 데 사용됩니다.
TextReader
TextWriter
이진 데이터가 아닌 문자 및 문자열을 읽고 쓰는 다른 판독기와 작성기에 대한 추상 기본 클래스로 사용됩니다.

 

2. 공통적인 I/O 작업

 

2.1 공통적인 파일 작업

 

수행 작업 클래스 또는 메서드
텍스트 파일 만들기 File.CreateText 메서드
FileInfo.CreateText 메서드
File.Create 메서드
FileInfo.Create 메서드
텍스트 파일에 쓰기 StreamWriter 메서드
File 클래스
파일에 텍스트 추가 File.AppendText 메서드
FileInfo.AppendText 메서드
파일 이름 바꾸기 또는 이동 File.Move 메서드
FileInfo.MoveTo 메서드
파일 삭제 File.Delete 메서드
FileInfo.Delete 메서드
파일 복사 File.Copy 메서드
FileInfo.CopyTo 메서드
파일 크기 가져오기 FileInfo.Length 속성
파일 특성 가져오기 File.GetAttributes 메서드
파일의 특성 설정 File.SetAttributes 메서드
파일이 있는지 확인 File.Exists 메서드
이진 파일에서 읽기 BinaryWriter 클래스
이진 파일에 쓰기 Reader 클래스
파일 이름 확장명 검색 Path.GetExtension 메서드
파일의 정규화된 경로 검색 Path.GetFullPath 메서드
경로에서 파일 이름 및 확장명 검색 Path.GetFileName 메서드
파일의 확장명 변경 Path.ChangeExtension 메서드

 

 

2.2 공통적인 디렉터리 작업

 

수행 작업 클래스 또는 메서드
디렉터리 만들기 Directory.CreateDirectory 메서드
FileInfo.Directory 속성
하위 디렉터리 만들기 DirectoryInfo.CreateSubdirectory 메서드
디렉터리 이름 바꾸기 또는 이동 Directory.Move 메서드
DirectoryInfo.MoveTo 메서드
디렉터리 복사 DirectoryCopy 메서드
디렉터리 삭제 Directory.Delete 메서드
DirectoryInfo.Delete 메서드
디렉터리에 있는 파일 및 하위 디렉터리 보기 방법: 디렉터리 및 파일 열거
 - 디렉터리 이름 Directory.EnumerateDirectories
 - 디렉터리 정보(DirectoryInfo) DirectoryInfo.EnumerateDirectories
 - 파일 이름 Directory.EnumerateFiles
 - 파일 정보(FileInfo) DirectoryInfo.EnumerateFiles
 - 파일 시스템 항목 이름 Directory.EnumerateFileSystemEntries
 - 파일 시스템 항목 정보(FileSystemInfo) DirectoryInfo.EnumerateFileSystemInfos
 - 디렉터리 및 파일 이름 Directory.EnumerateFileSystemEntries
디렉터리 크기 찾기 System.IO.Directory 클래스
디렉터리가 있는지 확인 Directory.Exists 메서드

 

 

3. File 클래스

 

단일 파일에 대한 만들기, 복사, 삭제, 이동 및 열기를 위한 정적 메서드를 제공하고 FileStream 개체 만들기를 지원합니다.

 

 

3.1 메서드

 

메서드 내용
AppendAllLines(String, IEnumerable<String>) 파일에 줄을 추가한 다음 파일을 닫습니다지정한 파일이 없는 경우 메서드는 파일을 만들고 지정된 줄을 파일에 다음 파일을 닫습니다.
AppendAllLines(String, IEnumerable<String>, Encoding) 지정된 인코딩을 사용하여 파일에 줄을 추가한 다음 파일을 닫습니다지정한 파일이 없는 경우 메서드는 파일을 만들고 지정된 줄을 파일에 다음 파일을 닫습니다.
AppendAllLinesAsync(String, IEnumerable<String>, CancellationToken) 파일에 비동기식으로 줄을 추가한 다음 파일을 닫습니다지정한 파일이 없는 경우 메서드는 파일을 만들고 지정된 줄을 파일에 다음 파일을 닫습니다.
AppendAllLinesAsync(String, IEnumerable<String>, Encoding, CancellationToken) 지정된 인코딩을 사용하여 비동기식으로 파일에 줄을 추가한 다음 파일을 닫습니다지정한 파일이 없는 경우 메서드는 파일을 만들고 지정된 줄을 파일에 다음 파일을 닫습니다.
AppendAllText(String, String) 파일을 열고 지정된 문자열을 파일에 추가한 다음 파일을 닫습니다파일이 없는 경우 메서드는 파일을 만들고 지정된 문자열을 파일에 다음 파일을 닫습니다.
AppendAllText(String, String, Encoding) 지정된 인코딩을 사용하여 지정된 문자열을 파일에 추가하며, 파일이 없는 경우 파일을 생성합니다.
AppendAllTextAsync(String, String, CancellationToken) 파일이 없는 경우 비동기식으로 파일을 열거나 파일을 만든 다음, 지정된 문자열을 파일에 추가한 파일을 닫습니다.
AppendAllTextAsync(String, String, Encoding, CancellationToken) 파일이 아직 없는 경우 비동기식으로 파일을 열거나 파일을 만든 다음, 지정된 인코딩을 사용하여 지정된 문자열을 파일에 추가한 파일을 닫습니다.
AppendText(String) 기존 파일 또는 지정된 파일이 존재하지 않는 경우 새 파일에 UTF-8 인코딩된 텍스트를 추가하는 StreamWriter를 만듭니다.
Copy(String, String) 파일에 기존 파일을 복사합니다같은 이름의 파일을 덮어쓸 수는 없습니다.
Copy(String, String, Boolean) 파일에 기존 파일을 복사합니다같은 이름의 파일을 덮어쓸 있습니다.
Create(String) 지정된 경로에 파일을 만들거나 지정된 경로의 파일을 덮어씁니다.
Create(String, Int32) 지정된 경로에 파일을 만들거나 덮어써서 버퍼 크기를 지정합니다.
Create(String, Int32, FileOptions) 지정된 경로에 파일을 만들거나 덮어써서 버퍼 크기와 파일을 만들거나 덮어쓰는 방법을 설명하는 옵션을 지정합니다.
CreateText(String) UTF-8 인코딩된 텍스트를 쓰기 위해 파일을 만들거나 엽니다파일이 이미 있으면 해당 콘텐츠를 덮어씁니다.
Decrypt(String) 현재 계정으로 Encrypt(String) 메서드를 통해 암호화된 파일을 해독합니다.
Delete(String) 지정한 파일을 삭제합니다.
Encrypt(String) 파일을 암호화하는 사용된 계정으로만 해독할 있도록 암호화합니다.
Exists(String) 지정된 파일이 있는지를 확인합니다.
GetAttributes(String) 경로에 있는 파일의 FileAttributes를 가져옵니다.
GetCreationTime(String) 지정된 파일 또는 디렉터리의 만든 날짜와 시간을 반환합니다.
GetCreationTimeUtc(String) 지정된 파일이나 디렉터리를 만든 날짜와 시간을 UTC 기준으로 반환합니다.
GetLastAccessTime(String) 지정된 파일 또는 디렉터리를 마지막으로 액세스한 날짜와 시간을 반환합니다.
GetLastAccessTimeUtc(String) 지정된 파일 또는 디렉터리를 마지막으로 액세스한 날짜와 시간을 UTC 기준으로 반환합니다.
GetLastWriteTime(String) 지정된 파일 또는 디렉터리를 마지막으로 날짜와 시간을 반환합니다.
GetLastWriteTimeUtc(String) 지정된 파일 또는 디렉터리에 마지막으로 날짜와 시간을 UTC 기준으로 반환합니다.
Move(String, String) 지정된 파일을 위치로 이동하고 파일의 이름을 지정할 있는 옵션을 제공합니다.
Move(String, String, Boolean) 파일 이름을 지정하고 대상 파일이 이미 있으면 덮어쓰는 옵션을 제공하여, 지정된 파일을 위치로 이동합니다.
Open(String, FileMode) 지정된 경로에서 FileStream을 공유하지 않고 읽기/쓰기 액세스로 엽니다.
Open(String, FileMode, FileAccess) 지정된 경로에서 FileStream을 공유하지 않고 지정된 모드와 액세스로 엽니다.
Open(String, FileMode, FileAccess, FileShare) 읽기, 쓰기 또는 읽기/쓰기 권한과 지정된 공유 옵션을 사용하여 지정된 경로에서 지정된 모드를 갖는 FileStream을 엽니다.
OpenRead(String) 읽기용으로 기존 파일을 엽니다.
OpenText(String) UTF-8 인코딩된 기존 텍스트 파일을 읽기용으로 엽니다.
OpenWrite(String) 쓰기 위해 기존 파일을 열거나 파일을 만듭니다.
ReadAllBytes(String) 이진 파일을 열고 파일의 내용을 바이트 배열로 읽어 들인 다음 파일을 닫습니다.
ReadAllBytesAsync(String, CancellationToken) 이진 파일을 비동기식으로 열고 파일의 내용을 바이트 배열로 읽은 다음 파일을 닫습니다.
ReadAllLines(String) 텍스트 파일을 열고 파일의 모든 줄을 읽은 다음 파일을 닫습니다.
ReadAllLines(String, Encoding) 파일을 열고 지정된 인코딩을 사용하여 파일의 모든 줄을 읽은 다음 파일을 닫습니다.
ReadAllLinesAsync(String, CancellationToken) 텍스트 파일을 비동기식으로 열고 파일의 모든 줄을 읽은 다음 파일을 닫습니다.
ReadAllLinesAsync(String, Encoding, CancellationToken) 비동기식으로 텍스트 파일을 열고 지정된 인코딩을 사용하여 파일의 모든 줄을 읽은 다음 파일을 닫습니다.
ReadAllText(String) 텍스트 파일을 열고, 파일의 모든 텍스트를 읽은 다음에 파일을 닫습니다.
ReadAllText(String, Encoding) 파일을 열고, 지정된 인코딩을 사용하여 파일의 모든 텍스트를 읽은 다음에 파일을 닫습니다.
ReadAllTextAsync(String, CancellationToken) 비동기식으로 텍스트 파일을 열고, 파일의 모든 텍스트를 읽은 다음 파일을 닫습니다.
ReadAllTextAsync(String, Encoding, CancellationToken) 비동기식으로 텍스트 파일을 열고 지정된 인코딩을 사용하여 파일의 모든 텍스트를 읽은 다음 파일을 닫습니다.
ReadLines(String) 파일의 줄을 읽습니다.
ReadLines(String, Encoding) 지정된 인코딩을 가진 파일의 줄을 읽습니다.
Replace(String, String, String) 지정된 파일의 내용을 다른 파일의 내용으로 대체합니다. 이때 원래 파일은 삭제되고 대체된 파일의 백업이 만들어집니다.
Replace(String, String, String, Boolean) 지정된 파일의 내용을 다른 파일의 내용으로 대체합니다. 이때 원래 파일은 삭제되고 대체된 파일의 백업이 만들어지며 선택적으로 병합 오류가 무시됩니다.
SetAttributes(String, FileAttributes) 지정된 경로에 있는 파일의 지정된 FileAttributes를 가져옵니다.
SetCreationTime(String, DateTime) 파일이 만들어진 날짜와 시간을 설정합니다.
SetCreationTimeUtc(String, DateTime) 파일을 만든 날짜와 시간을 UTC 기준으로 설정합니다.
SetLastAccessTime(String, DateTime) 지정된 파일을 마지막으로 액세스한 날짜와 시간을 설정합니다.
SetLastAccessTimeUtc(String, DateTime) 지정된 파일을 마지막으로 액세스한 날짜와 시간을 UTC 기준으로 설정합니다.
SetLastWriteTime(String, DateTime) 지정된 파일에 마지막으로 날짜와 시간을 설정합니다.
SetLastWriteTimeUtc(String, DateTime) 지정된 파일에 마지막으로 날짜와 시간을 UTC 기준으로 설정합니다.
WriteAllBytes(String, Byte[]) 파일을 만들고 지정된 바이트 배열을 파일에 다음 파일을 닫습니다대상 파일이 이미 있으면 덮어씁니다.
WriteAllBytesAsync(String, Byte[], CancellationToken) 비동기식으로 파일을 만들고 지정된 바이트 배열을 파일에 다음 파일을 닫습니다대상 파일이 이미 있으면 덮어씁니다.
WriteAllLines(String, IEnumerable<String>) 파일을 만들고 문자열의 컬렉션을 파일에 다음 파일을 닫습니다.
WriteAllLines(String, IEnumerable<String>, Encoding) 지정된 인코딩을 사용하여 파일을 만들고 문자열의 컬렉션을 파일에 다음 파일을 닫습니다.
WriteAllLines(String, String[]) 파일을 만들고 지정된 문자열 배열을 파일에 다음 파일을 닫습니다.
WriteAllLines(String, String[], Encoding) 파일을 만들고 지정된 인코딩을 사용하여 지정된 문자열 배열을 파일에 다음 파일을 닫습니다.
WriteAllLinesAsync(String, IEnumerable<String>, CancellationToken) 비동기식으로 파일을 만들고 지정된 줄을 파일에 다음 파일을 닫습니다.
WriteAllLinesAsync(String, IEnumerable<String>, Encoding, CancellationToken) 비동기식으로 파일을 만들고 지정된 인코딩을 사용하여 지정된 줄을 파일에 다음 파일을 닫습니다.
WriteAllText(String, String) 파일을 만들고 지정된 문자열을 파일에 다음 파일을 닫습니다대상 파일이 이미 있으면 덮어씁니다.
WriteAllText(String, String, Encoding) 파일을 만들고 지정된 인코딩을 사용하여 지정된 문자열을 파일에 다음 파일을 닫습니다대상 파일이 이미 있으면 덮어씁니다.
WriteAllTextAsync(String, String, CancellationToken) 비동기식으로 파일을 만들고 지정된 문자열을 파일에 다음 파일을 닫습니다대상 파일이 이미 있으면 덮어씁니다.
WriteAllTextAsync(String, String, Encoding, CancellationToken) 비동기식으로 파일을 만들고 지정된 인코딩을 사용하여 지정된 문자열을 파일에 다음 파일을 닫습니다대상 파일이 이미 있으면 덮어씁니다.

 

 

3.2 열거형

 

3.2.1 FileAccess : 파일에 대 한 읽기 및 쓰기 권한을 지정 합니다.

 

필드 내용
Read 1 파일에 대한 읽기 액세스입니다. 데이터를 파일에서 읽을 수 있습니다. 읽기/쓰기 액세스에 대한 Write와 함께 사용합니다.
ReadWrite 3 파일에 대한 읽기 및 쓰기 액세스입니다. 데이터를 파일에 쓰고 파일에서 읽을 수 있습니다.
Write 2 파일에 대한 쓰기 액세스입니다. 데이터를 파일에 쓸 수 있습니다. 읽기/쓰기 액세스에 대한 Read와 함께 사용합니다.

 

 

3.2.2 FileShare : 이미 사용 중인 파일에 허용 되는 액세스 수준을 지정 합니다.

 

필드 내용
Delete 4 파일의 후속 삭제를 허용합니다.
Inheritable 16 파일 핸들을 자식 프로세스에서 상속할 수 있도록 합니다. Win32에서는 이러한 방식이 직접 지원되지 않습니다.
None 0 현재 파일의 공유를 거절합니다. 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 열려는 요청이 수행됩니다.
Read 1 다음에 파일을 읽기용으로 여는 것을 허용합니다. 이 플래그가 지정되어 있지 않은 경우 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 읽기용으로 열려는 요청이 수행됩니다. 그러나 이 플래그가 지정되어 있으면 파일에 액세스하는 데 추가 권한이 필요할 수도 있습니다.
ReadWrite 3 다음에 파일을 읽기용 또는 쓰기용으로 여는 것을 허용합니다. 이 플래그가 지정되어 있지 않은 경우 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 읽기용 또는 쓰기용으로 열려는 요청이 수행됩니다. 그러나 이 플래그가 지정되어 있으면 파일에 액세스하는 데 추가 권한이 필요할 수도 있습니다.
Write 2 다음에 파일을 쓰기용으로 여는 것을 허용합니다. 이 플래그가 지정되어 있지 않은 경우 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 쓰기용으로 열려는 요청이 수행됩니다. 그러나 이 플래그가 지정되어 있으면 파일에 액세스하는 데 추가 권한이 필요할 수도 있습니다.

 

 

3.2.3 FileMode : 기존 파일의 내용을 유지할지 아니면 덮어쓸지, 기존 파일을 만들지를 요청 하면 예외가 발생 하는지 여부를 지정 합니다.

 

필드 내용
Append 6 해당 파일이 있을 경우 파일을 열고 파일의 끝까지 검색하거나 새 파일을 만듭니다. Append 권한이 필요합니다. FileMode.Append FileAccess.Write와 함께만 사용할 수 있습니다. 파일이 끝나기 이전 위치까지 검색하려고 하면 IOException 예외를 throw하고 읽기 시도가 실패하면 NotSupportedException 예외를 throw합니다.
Create 2 운영 체제에서 새 파일을 만들도록 지정합니다. 파일이 이미 있으면 덮어씁니다. Write 권한이 필요합니다. FileMode.Create는 파일이 없으면 CreateNew를 사용하고, 파일이 있으면 Truncate를 사용하도록 요청하는 것과 마찬가지입니다. 파일이 이미 있지만 숨김 파일이면 UnauthorizedAccessException 예외가 throw됩니다.
CreateNew 1 운영 체제에서 새 파일을 만들도록 지정합니다. Write 권한이 필요합니다. 파일이 이미 있으면 IOException 예외가 throw됩니다.
Open 3 운영 체제에서 기존 파일을 열도록 지정합니다. 파일을 열 수 있는지 여부는 FileAccess 열거형에서 지정된 값에 따라 달라집니다. 파일이 없으면 FileNotFoundException 예외가 throw됩니다.
OpenOrCreate 4 파일이 있으면 운영 체제에서 파일을 열고 그렇지 않으면 새 파일을 만들도록 지정합니다. FileAccess.Read를 사용하여 파일을 여는 경우 Read 권한이 필요합니다. 파일 액세스가 FileAccess.Write이면 Write 권한이 필요합니다. FileAccess.ReadWrite를 사용하여 파일을 여는 경우 Read Write 권한이 모두 필요합니다.
Truncate 5 운영 체제에서 기존 파일을 열도록 지정합니다. 파일을 열면 크기가 0바이트가 되도록 잘라야 합니다. Write 권한이 필요합니다. FileMode.Truncate로 연 파일에서 읽으려고 하면 ArgumentException 예외가 발생합니다.

 

 

3.3 예제

 

아래 예제를 실행 되기 위해서는 코드를 실행 하기 전에 D:\temp 폴더를 만들어야 합니다.

 

using UnityEngine;
using System.IO;

public class FileDemo : MonoBehaviour
{
    public string m_FilePath = @"D:\temp\MyTest.txt";

    void Start()
    {
        if (!File.Exists(m_FilePath))
        {
            using (StreamWriter sw = File.CreateText(m_FilePath))
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome");
            }
        }

        using (StreamReader sr = File.OpenText(m_FilePath))
        {
            string s;
            while ((s = sr.ReadLine()) != null)
            {
                Debug.Log(s);
            }
        }
    }
}

 

 

4. FileInfo 클래스

 

파일을 만들고, 복사하고, 삭제하고, 이동하고, 열기 위한 속성 및 인스턴스 메서드를 제공하고, FileStream 개체를 만드는 것을 도와줍니다. 

 

 

4.1  생성자

 

생성자 내용
FileInfo(String) 파일 경로의 래퍼 역할을 하는 FileInfo 클래스의 새 인스턴스를 초기화합니다.

 

 

4.2  필드

 

필드 내용
FullPath 파일이나 디렉터리의 정규화된 경로를 나타냅니다.
OriginalPath 사용자가 원래 지정한 상대 또는 절대 경로입니다.

 

 

4.3  속성

 

속성 내용
Attributes 현재 파일 또는 디렉터리의 특성을 가져오거나 설정합니다.
CreationTime 현재 파일 또는 디렉터리를 만든 시간을 가져오거나 설정합니다.
CreationTimeUtc 현재 파일 또는 디렉터리를 만든 시간을 UTC(협정 세계시) 기준으로 가져오거나 설정합니다.
Directory 부모 디렉터리의 인스턴스를 가져옵니다.
DirectoryName 디렉터리의 전체 경로를 나타내는 문자열을 가져옵니다.
Exists 파일이 있는지 여부를 나타내는 값을 가져옵니다.
Extension 파일의 확장명 부분을 나타내는 문자열을 가져옵니다.
FullName 파일이나 디렉터리의 전체 경로를 가져옵니다.
IsReadOnly 현재 파일이 읽기 전용인지 여부를 결정하는 값을 가져오거나 설정합니다.
LastAccessTime 현재 파일이나 디렉터리에 마지막으로 액세스한 시간을 가져오거나 설정합니다.
LastAccessTimeUtc 현재 파일이나 디렉터리를 마지막으로 액세스한 시간을 UTC 기준으로 가져오거나 설정합니다.
LastWriteTime 현재 파일이나 디렉터리에 마지막으로 시간을 가져오거나 설정합니다.
LastWriteTimeUtc 현재 파일이나 디렉터리에 마지막으로 시간을 UTC 기준으로 가져오거나 설정합니다.
Length 현재 파일의 크기(바이트) 가져옵니다.
Name 파일 이름을 가져옵니다.

 

 

4.4 메서드

 

메서드 내용
AppendText() StreamWriter 인스턴스가 나타내는 파일에 텍스트를 추가하는 FileInfo 만듭니다.
CopyTo(String) 파일에 기존 파일을 복사하고 기존 파일을 덮어쓸 없도록 합니다.
CopyTo(String, Boolean) 파일에 기존 파일을 복사하고 기존 파일을 덮어쓸 있도록 합니다.
Create() 파일을 만듭니다.
CreateObjRef(Type) 원격 개체와 통신하는 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.
CreateText() 새 텍스트 파일을 쓰는 StreamWriter를 만듭니다.
Decrypt() 현재 계정으로 Encrypt() 메서드를 통해 암호화된 파일을 해독합니다.
Delete() 파일을 영구적으로 삭제합니다.
Encrypt() 파일을 암호화하는 사용된 계정으로만 해독할 있도록 암호화합니다.
Equals(Object) 지정된 개체가 현재 개체와 같은지 확인합니다.
GetHashCode() 기본 해시 함수로 작동합니다.
GetObjectData(SerializationInfo, StreamingContext) 파일 이름 및 추가 예외 정보를 사용하여 SerializationInfo 개체를 설정합니다.
GetType() 현재 인스턴스의 Type을 가져옵니다.
MemberwiseClone() 현재 Object의 단순 복사본을 만듭니다.
MemberwiseClone(Boolean) 현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.
MoveTo(String) 지정된 파일을 위치로 이동하고 파일의 이름을 지정할 있는 옵션을 제공합니다.
MoveTo(String, Boolean) 파일 이름을 지정하고 대상 파일이 이미 있으면 덮어쓰는 옵션을 제공하여, 지정된 파일을 위치로 이동합니다.
Open(FileMode) 지정된 모드로 파일을 엽니다.
Open(FileMode, FileAccess) 읽기, 쓰기 또는 읽기/쓰기 권한을 사용하여 지정된 모드로 파일을 엽니다.
Open(FileMode, FileAccess, FileShare) 읽기, 쓰기 또는 읽기/쓰기 권한과 지정된 공유 옵션을 사용하여 특정 모드로 파일을 엽니다.
OpenRead() 읽기 전용 FileStream을 만듭니다.
OpenText() UTF8 인코딩 방식으로 기존 텍스트 파일에서 읽는 StreamReader 를 만듭니다.
OpenWrite() 쓰기 전용 FileStream을 만듭니다.
Refresh() 개체의 상태를 새로 고칩니다.
Replace(String, String) 지정된 파일의 내용을 현재 FileInfo 개체에서 설명하는 파일로 대체합니다. 이때 원본 파일을 삭제하고 대체된 파일의 백업을 만듭니다.
Replace(String, String, Boolean) 지정된 파일의 내용을 현재 FileInfo 개체에서 설명하는 파일로 대체합니다. 이때 원본 파일을 삭제하고 대체된 파일의 백업을 만듭니다병합 오류를 무시할지 여부도 지정합니다.
ToString() 경로를 문자열로 반환합니다전체 경로에는 Name 속성을 사용합니다.

 

확장 메서드 내용
Create(FileInfo, FileMode, FileSystemRights, FileShare, Int32, FileOptions, FileSecurity) 지정된 속성 보안 설정을 사용하여 파일 스트림을 만듭니다.
GetAccessControl(FileInfo) 파일의 보안 정보를 반환합니다.
GetAccessControl(FileInfo, AccessControlSections) 파일의 보안 정보를 반환합니다.
SetAccessControl(FileInfo, FileSecurity) 기존 파일의 보안 특성을 변경합니다.

 

 

4.5 열거형

 

4.5.1 FileAccess : 파일에 대 한 읽기 및 쓰기 권한을 지정 합니다.

 

필드 내용
Read 1 파일에 대한 읽기 액세스입니다. 데이터를 파일에서 읽을 수 있습니다. 읽기/쓰기 액세스에 대한 Write와 함께 사용합니다.
ReadWrite 3 파일에 대한 읽기 및 쓰기 액세스입니다. 데이터를 파일에 쓰고 파일에서 읽을 수 있습니다.
Write 2 파일에 대한 쓰기 액세스입니다. 데이터를 파일에 쓸 수 있습니다. 읽기/쓰기 액세스에 대한 Read와 함께 사용합니다.

 

 

4.5.2 FileShare : 이미 사용 중인 파일에 허용 되는 액세스 수준을 지정 합니다.

 

필드 내용
Delete 4 파일의 후속 삭제를 허용합니다.
Inheritable 16 파일 핸들을 자식 프로세스에서 상속할 수 있도록 합니다. Win32에서는 이러한 방식이 직접 지원되지 않습니다.
None 0 현재 파일의 공유를 거절합니다. 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 열려는 요청이 수행됩니다.
Read 1 다음에 파일을 읽기용으로 여는 것을 허용합니다. 이 플래그가 지정되어 있지 않은 경우 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 읽기용으로 열려는 요청이 수행됩니다. 그러나 이 플래그가 지정되어 있으면 파일에 액세스하는 데 추가 권한이 필요할 수도 있습니다.
ReadWrite 3 다음에 파일을 읽기용 또는 쓰기용으로 여는 것을 허용합니다. 이 플래그가 지정되어 있지 않은 경우 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 읽기용 또는 쓰기용으로 열려는 요청이 수행됩니다. 그러나 이 플래그가 지정되어 있으면 파일에 액세스하는 데 추가 권한이 필요할 수도 있습니다.
Write 2 다음에 파일을 쓰기용으로 여는 것을 허용합니다. 이 플래그가 지정되어 있지 않은 경우 파일을 닫아야만 이 프로세스나 다른 프로세스에서 파일을 쓰기용으로 열려는 요청이 수행됩니다. 그러나 이 플래그가 지정되어 있으면 파일에 액세스하는 데 추가 권한이 필요할 수도 있습니다.

 

 

4.5.3 FileMode : 기존 파일의 내용을 유지할지 아니면 덮어쓸지, 기존 파일을 만들지를 요청 하면 예외가 발생 하는지 여부를 지정 합니다.

 

필드 내용
Append 6 해당 파일이 있을 경우 파일을 열고 파일의 끝까지 검색하거나 새 파일을 만듭니다. Append 권한이 필요합니다. FileMode.Append FileAccess.Write와 함께만 사용할 수 있습니다. 파일이 끝나기 이전 위치까지 검색하려고 하면 IOException 예외를 throw하고 읽기 시도가 실패하면 NotSupportedException 예외를 throw합니다.
Create 2 운영 체제에서 새 파일을 만들도록 지정합니다. 파일이 이미 있으면 덮어씁니다. Write 권한이 필요합니다. FileMode.Create는 파일이 없으면 CreateNew를 사용하고, 파일이 있으면 Truncate를 사용하도록 요청하는 것과 마찬가지입니다. 파일이 이미 있지만 숨김 파일이면 UnauthorizedAccessException 예외가 throw됩니다.
CreateNew 1 운영 체제에서 새 파일을 만들도록 지정합니다. Write 권한이 필요합니다. 파일이 이미 있으면 IOException 예외가 throw됩니다.
Open 3 운영 체제에서 기존 파일을 열도록 지정합니다. 파일을 열 수 있는지 여부는 FileAccess 열거형에서 지정된 값에 따라 달라집니다. 파일이 없으면 FileNotFoundException 예외가 throw됩니다.
OpenOrCreate 4 파일이 있으면 운영 체제에서 파일을 열고 그렇지 않으면 새 파일을 만들도록 지정합니다. FileAccess.Read를 사용하여 파일을 여는 경우 Read 권한이 필요합니다. 파일 액세스가 FileAccess.Write이면 Write 권한이 필요합니다. FileAccess.ReadWrite를 사용하여 파일을 여는 경우 Read Write 권한이 모두 필요합니다.
Truncate 5 운영 체제에서 기존 파일을 열도록 지정합니다. 파일을 열면 크기가 0바이트가 되도록 잘라야 합니다. Write 권한이 필요합니다. FileMode.Truncate로 연 파일에서 읽으려고 하면 ArgumentException 예외가 발생합니다.

 

 

4.6 예제

 

using UnityEngine;
using System;
using System.IO;

public class FileInfoDemo : MonoBehaviour
{
    public string m_FilePath = Path.GetTempFileName();
    private FileInfo m_FileInfori1;

    void Start()
    {
        m_FileInfori1 = new FileInfo(m_FilePath);

        using (StreamWriter sw = m_FileInfori1.CreateText())
        {
            sw.WriteLine("Hello");
            sw.WriteLine("And");
            sw.WriteLine("Welcome");
        }
               
        using (StreamReader sr = m_FileInfori1.OpenText())
        {
            var s = "";
            while ((s = sr.ReadLine()) != null)
            {
                Debug.Log(s);
            }
        }

        try
        {
            string filePath2 = Path.GetTempFileName();
            var fileInfo2 = new FileInfo(filePath2);
            fileInfo2.Delete();                        
            m_FileInfori1.CopyTo(filePath2);
            Debug.Log($"{m_FilePath} was copied to {filePath2}.");
            fileInfo2.Delete();
            Debug.Log($"{filePath2} was successfully deleted.");
        }
        catch (Exception e)
        {
            Debug.Log($"The process failed: {e.ToString()}");
        }
    }
}

 

 

5. Directory 클래스

 

Directory디렉터리 복사, 이동, 이름 바꾸기, 만들기 및 삭제와 같은 일반적인 작업에 클래스를 사용 합니다.

 

 

5.1  메서드

 

메서드 내용
CreateDirectory(String) 이미 존재하지 않는 지정된 경로에 모든 디렉터리와 하위 디렉터리를 만듭니다.
Delete(String) 지정된 경로에서 디렉터리를 삭제합니다.
Delete(String, Boolean) 지정된 디렉터리와 해당 디렉터리의 하위 디렉터리 파일을 삭제합니다.
EnumerateDirectories(String) 지정된 경로에 있는 디렉터리 전체 이름의 열거 가능 컬렉션을 반환합니다.
EnumerateDirectories(String, String) 지정된 경로에서 검색 패턴과 일치하는 디렉터리 전체 이름의 열거 가능 컬렉션을 반환합니다.
EnumerateDirectories(String, String, EnumerationOptions) 지정된 경로에서 검색 패턴과 일치하는 디렉터리 전체 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.
EnumerateDirectories(String, String, SearchOption) 지정된 경로에서 검색 패턴과 일치하는 디렉터리 전체 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.
EnumerateFiles(String) 지정된 경로에 있는 전체 파일 이름의 열거 가능 컬렉션을 반환합니다.
EnumerateFiles(String, String) 지정된 경로에서 검색 패턴과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환합니다.
EnumerateFiles(String, String, EnumerationOptions) 지정된 경로에서 검색 패턴 열거형 옵션과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.
EnumerateFiles(String, String, SearchOption) 지정된 경로에서 검색 패턴과 일치하는 전체 파일 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.
EnumerateFileSystemEntries(String) 지정된 경로에 있는 파일 이름 디렉터리 이름의 열거 가능 컬렉션을 반환합니다.
EnumerateFileSystemEntries(String, String) 지정된 경로에서 검색 패턴과 일치하는 파일 이름 디렉터리 이름의 열거 가능 컬렉션을 반환합니다.
EnumerateFileSystemEntries(String, String, EnumerationOptions) 지정된 경로에서 검색 패턴 열거형 옵션과 일치하는 파일 이름 디렉터리 이름의 열거 가능 컬렉션을 반환합니다.
EnumerateFileSystemEntries(String, String, SearchOption) 지정된 경로에서 검색 패턴과 일치하는 파일 이름 디렉터리 이름의 열거 가능 컬렉션을 반환하고 선택적으로 하위 디렉터리를 검색합니다.
Exists(String) 지정된 경로가 디스크에 있는 기존 디렉터리를 참조하는지를 확인합니다.
GetCreationTime(String) 디렉터리를 만든 날짜와 시간을 가져옵니다.
GetCreationTimeUtc(String) 디렉터리를 만든 날짜와 시간을 UTC(Coordinated Universal Time) 형식으로 가져옵니다.
GetCurrentDirectory() 애플리케이션의 현재 작업 디렉터리를 가져옵니다.
GetDirectories(String) 지정된 디렉터리에 있는 하위 디렉터리의 이름(경로 포함) 반환합니다.
GetDirectories(String, String) 지정된 디렉터리에서 지정된 검색 패턴과 일치하는 하위 디렉터리 이름(파일 경로 포함) 반환합니다.
GetDirectories(String, String, EnumerationOptions) 지정된 디렉터리에서 지정된 검색 패턴 열거형 옵션과 일치하는 하위 디렉터리 이름(파일 경로 포함) 반환합니다.
GetDirectories(String, String, SearchOption) 지정된 디렉터리에서 지정된 검색 패턴과 일치하는 하위 디렉터리(해당 경로 포함) 이름을 가져오고 선택적으로 하위 디렉터리를 반환합니다.
GetDirectoryRoot(String) 지정된 경로에 대한 볼륨 정보, 루트 정보 또는 정보 모두를 반환합니다.
GetFiles(String) 지정된 디렉터리에 있는 파일의 이름(경로 포함) 반환합니다.
GetFiles(String, String) 지정된 디렉터리에서 지정된 검색 패턴과 일치하는 파일 이름(파일 경로 포함) 반환합니다.
GetFiles(String, String, EnumerationOptions) 지정된 디렉터리에서 지정된 검색 패턴 열거형 옵션과 일치하는 파일 이름(파일 경로 포함) 반환합니다.
GetFiles(String, String, SearchOption) 하위 디렉터리를 검색할지를 나타내는 값을 사용하여 지정된 디렉터리에서 지정된 검색 패턴과 일치하는 파일 이름(파일 경로 포함) 반환합니다.
GetFileSystemEntries(String) 지정된 경로에 있는 모든 파일과 하위 디렉터리의 이름을 반환합니다.
GetFileSystemEntries(String, String) 지정된 경로에서 검색 패턴과 일치하는 파일 디렉터리 이름 배열을 반환합니다.
GetFileSystemEntries(String, String, EnumerationOptions) 지정된 경로에서 검색 패턴 열거형 옵션과 일치하는 파일 이름 디렉터리 이름의 배열을 반환합니다.
GetFileSystemEntries(String, String, SearchOption) 지정된 경로에서 검색 패턴과 일치하는 모든 파일 이름 디렉터리 이름의 배열을 가져오고 선택적으로 하위 디렉터리를 반환합니다.
GetLastAccessTime(String) 지정된 파일 또는 디렉터리를 마지막으로 액세스한 날짜와 시간을 반환합니다.
GetLastAccessTimeUtc(String) 지정된 파일 또는 디렉터리에 마지막으로 액세스한 날짜와 시간을 UTC(Coordinated Universal Time) 형식으로 반환합니다.
GetLastWriteTime(String) 지정된 파일 또는 디렉터리를 마지막으로 날짜와 시간을 반환합니다.
GetLastWriteTimeUtc(String) 지정된 파일이나 디렉터리에 마지막으로 날짜와 시간을 UTC(Coordinated Universal Time) 형식으로 반환합니다.
GetLogicalDrives() 해당 컴퓨터에서 "<드라이브 문자>:\" 형식으로 논리 드라이브 이름을 검색합니다.
GetParent(String) 지정된 경로의 절대 경로와 상대 경로를 모두 포함한 부모 디렉터리를 검색합니다.
Move(String, String) 파일 또는 디렉터리와 내용을 위치로 이동합니다.
SetCreationTime(String, DateTime) 지정된 파일 또는 디렉터리에 대한 만든 날짜와 시간을 설정합니다.
SetCreationTimeUtc(String, DateTime) 지정된 파일이나 디렉터리를 만든 날짜와 시간을 UTC(Coordinated Universal Time) 형식으로 설정합니다.
SetCurrentDirectory(String) 애플리케이션의 현재 작업 디렉터리를 지정된 디렉터리로 설정합니다.
SetLastAccessTime(String, DateTime) 지정된 파일 또는 디렉터리를 마지막으로 액세스한 날짜와 시간을 설정합니다.
SetLastAccessTimeUtc(String, DateTime) 지정된 파일 또는 디렉터리에 마지막으로 액세스한 날짜와 시간을 UTC(Coordinated Universal Time) 형식으로 설정합니다.
SetLastWriteTime(String, DateTime) 디렉터리를 마지막으로 날짜와 시간을 설정합니다.
SetLastWriteTimeUtc(String, DateTime) 디렉터리에 마지막으로 날짜와 시간을 UTC(Coordinated Universal Time) 형식으로 설정합니다.

 

 

5.2  예제

 

5.2 예제 1

 

디렉터리에서 모든 텍스트 파일을 검색 하 여 새 디렉터리로 이동 하는 방법을 보여 줍니다. 

파일이 이동 된 후에는 원본 디렉터리에 더 이상 존재 하지 않습니다.

아래 예제를 실행 되기 위해서는 코드를 실행 하기 전에 D:\Current 폴더와 D:\Archive 폴더를 만들어야 합니다.

그리고 D:\Current 폴더안에 txt 파일이 있어야 합니다.

 

using UnityEngine;
using System;
using System.IO;

public class DirectoryDemo : MonoBehaviour
{
    public string m_SourceDirectory = @"D:\Current";
    public string m_ArchiveDirectory = @"D:\Archive";

    void Start()
    {      
        try
        {
            var txtFiles = Directory.EnumerateFiles(m_SourceDirectory, "*.txt");

            foreach (string currentFile in txtFiles)
            {
                string fileName = currentFile.Substring(m_SourceDirectory.Length + 1);
                Directory.Move(currentFile, Path.Combine(m_ArchiveDirectory, fileName));
            }
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }
    }
}

 

 

5.2 예제 2

 

EnumerateFiles 디렉터리에서 텍스트 파일의 컬렉션을 검색 한 다음 쿼리에서 해당 컬렉션을 사용 하여 "example"이 포함 된 모든 줄을 찾는 방법을 보여 줍니다.

 

using UnityEngine;
using System.IO;
using System.Linq;

public class DirectoryDemo : MonoBehaviour
{
    public string m_ArchiveDirectory = @"D:\Archive";

    void Start()
    {
        var files = from retrievedFile in Directory.EnumerateFiles(m_ArchiveDirectory, "*.txt", SearchOption.AllDirectories)
                    from line in File.ReadLines(retrievedFile)
                    where line.Contains("Example")
                    select new
                    {
                        File = retrievedFile,
                        Line = line
                    };

        foreach (var f in files)
        {
            Debug.LogFormat("{0} contains {1}", f.File, f.Line);
        }

        Debug.LogFormat("{0} lines found.", files.Count().ToString());
    }
}

 

 

5.3 예제 3

 

디렉터리 및 모든 파일을 새 디렉터리로 이동 하는 방법을 보여 줍니다. 원본 디렉터리가 이동한 후에는 더 이상 존재 하지 않습니다.

아래 예제를 실행 되기 위해서는 코드를 실행 하기 전에 D:\Source 폴더와 D:\Destination 폴더를 만들어야 합니다.

그리고 D:\Current 폴더안에 txt 파일이 있어야 합니다.

 

using UnityEngine;
using System.IO;
using System;

public class DirectoryDemo : MonoBehaviour
{
    string m_SourceDirectory = @"D:\Source";
    string m_DestinationDirectory = @"D:\Destination";

    void Start()
    {
        try
        {
            Directory.Move(m_SourceDirectory, m_DestinationDirectory);
        }

        catch (Exception e)
        {
            Debug.Log(e.Message);
        }
    }
}

 

 

6. DirectoryInfo 클래스

 

디렉터리 및 하위 디렉터리를 만들고, 이동하고, 열거하는 인스턴스 메서드를 노출합니다. 이 클래스는 상속될 수 없습니다.

 

 

6.1  생성자

 

생성자 내용
DirectoryInfo(String) 지정된 경로를 사용하여 DirectoryInfo 클래스의 새 인스턴스를 초기화합니다.

 

 

6.2  필드

 

필드 내용
FullPath 파일이나 디렉터리의 정규화된 경로를 나타냅니다.
OriginalPath 사용자가 원래 지정한 상대 또는 절대 경로입니다.

 

 

6.3  속성

 

속성 내용
Attributes 현재 파일 또는 디렉터리의 특성을 가져오거나 설정합니다.
CreationTime 현재 파일 또는 디렉터리를 만든 시간을 가져오거나 설정합니다.
CreationTimeUtc 현재 파일 또는 디렉터리를 만든 시간을 UTC(협정 세계시) 기준으로 가져오거나 설정합니다.
Exists 디렉터리가 있는지를 나타내는 값을 가져옵니다.
Extension 파일의 확장명 부분을 나타내는 문자열을 가져옵니다.
FullName 파일이나 디렉터리의 전체 경로를 가져옵니다.
LastAccessTime 현재 파일이나 디렉터리에 마지막으로 액세스한 시간을 가져오거나 설정합니다.
LastAccessTimeUtc 현재 파일이나 디렉터리를 마지막으로 액세스한 시간을 UTC 기준으로 가져오거나 설정합니다.
LastWriteTime 현재 파일이나 디렉터리에 마지막으로 시간을 가져오거나 설정합니다.
LastWriteTimeUtc 현재 파일이나 디렉터리에 마지막으로 시간을 UTC 기준으로 가져오거나 설정합니다.
Name  DirectoryInfo 인스턴스의 이름을 가져옵니다.
Parent 지정된 하위 디렉터리의 부모 디렉터리를 가져옵니다.
Root 디렉터리의 루트 부분을 가져옵니다.

 

 

6.4 메서드

 

메서드 내용
Create() 디렉터리를 만듭니다.
CreateObjRef(Type) 원격 개체와 통신하는 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.
CreateSubdirectory(String) 지정된 경로에 하위 디렉터리를 하나 이상 만듭니다지정된 경로는 DirectoryInfo 클래스의 이 인스턴스에 대한 상대적 경로일 수 있습니다.
Delete() DirectoryInfo가 비어 있으면 이를 삭제합니다.
Delete(Boolean) 하위 디렉터리와 파일을 삭제할지 여부를 지정하여 DirectoryInfo의 이 인스턴스를 삭제합니다.
EnumerateDirectories() 현재 디렉터리에 있는 디렉터리 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateDirectories(String) 지정된 검색 패턴과 일치하는 디렉터리 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateDirectories(String, EnumerationOptions) 지정된 검색 패턴 열거형 옵션과 일치하는 디렉터리 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateDirectories(String, SearchOption) 지정된 검색 패턴 하위 디렉터리 검색 옵션과 일치하는 디렉터리 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFiles() 현재 디렉터리에 있는 파일 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFiles(String) 검색 패턴과 일치하는 파일 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFiles(String, EnumerationOptions) 지정된 검색 패턴 열거형 옵션과 일치하는 파일 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFiles(String, SearchOption) 지정된 검색 패턴 하위 디렉터리 검색 옵션과 일치하는 파일 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFileSystemInfos() 현재 디렉터리에 있는 파일 시스템 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFileSystemInfos(String) 지정된 검색 패턴과 일치하는 파일 시스템 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFileSystemInfos(String, EnumerationOptions) 지정된 검색 패턴 열거형 옵션과 일치하는 파일 시스템 정보의 열거 가능 컬렉션을 반환합니다.
EnumerateFileSystemInfos(String, SearchOption) 지정된 검색 패턴 하위 디렉터리 검색 옵션과 일치하는 파일 시스템 정보의 열거 가능 컬렉션을 반환합니다.
Equals(Object) 지정된 개체가 현재 개체와 같은지 확인합니다.
(다음에서 상속됨 Object)
GetDirectories() 현재 디렉터리의 하위 디렉터리를 반환합니다.
GetDirectories(String) 주어진 검색 조건에 일치하는 현재 DirectoryInfo에 있는 디렉터리의 배열을 반환합니다.
GetDirectories(String, EnumerationOptions) 지정된 검색 패턴 및 열거 옵션과 일치하는 현재 DirectoryInfo의 디렉터리배열을 반환합니다.
GetDirectories(String, SearchOption) 하위 디렉터리를 검색할지 여부를 나타내는 값을 사용하여 현재 DirectoryInfo에서 지정된 검색 조건과 일치하는 디렉터리의 배열을 반환합니다.
GetFiles() 현재 디렉터리에서 파일 목록을 반환합니다.
GetFiles(String) 현재 디렉터리에서 지정된 검색 패턴과 일치하는 파일 목록을 반환합니다.
GetFiles(String, EnumerationOptions) 지정된 검색 패턴 열거 옵션과 일치하는 현재 디렉터리의 파일 목록을 반환합니다.
GetFiles(String, SearchOption) 하위 디렉터리를 검색할지 여부를 나타내는 값을 사용하여 현재 디렉터리에서 지정된 검색 패턴과 일치하는 파일 목록을 반환합니다.
GetFileSystemInfos() 디렉터리의 모든 파일과 하위 디렉터리를 나타내는 강력한 형식의 FileSystemInfo 엔트리 배열을 반환합니다.
GetFileSystemInfos(String) 지정된 검색 조건과 일치하는 파일 및 하위 디렉터리를 나타내는 강력한 형식의 FileSystemInfo 개체 배열을 검색합니다.
GetFileSystemInfos(String, EnumerationOptions) 지정된 검색 패턴 및 열거형 옵션과 일치하는 파일 및 하위 디렉터리를 나타내는 강력한 형식의 FileSystemInfo 개체 배열을 검색합니다.
GetFileSystemInfos(String, SearchOption) 지정된 검색 조건과 일치하는 파일 및 하위 디렉터리를 나타내는 FileSystemInfo 개체 배열을 검색합니다.
GetHashCode() 기본 해시 함수로 작동합니다.
GetObjectData(SerializationInfo, StreamingContext) 파일 이름 및 추가 예외 정보를 사용하여 SerializationInfo 개체를 설정합니다.
GetType() 현재 인스턴스의 Type을 가져옵니다.
MemberwiseClone() 현재 Object의 단순 복사본을 만듭니다.
MemberwiseClone(Boolean) 현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.
MoveTo(String) DirectoryInfo 인스턴스 및 해당 내용을 새 경로로 이동합니다.
Refresh() 개체의 상태를 새로 고칩니다.
ToString() DirectoryInfo 생성자에 전달된 원래 경로를 반환합니다전체 경로 또는 파일/디렉터리 이름에는 메서드 대신 FullName 또는 Name 속성을 사용합니다.

 

확장 메서드 내용
Create(DirectoryInfo, DirectorySecurity) 지정된 디렉터리 보안을 사용하여 파일 디렉터리를 만듭니다디렉터리가 이미 있는 경우 아무 작업도 수행되지 않습니다.
GetAccessControl(DirectoryInfo) 디렉터리의 보안 정보를 반환합니다.
GetAccessControl(DirectoryInfo, AccessControlSections) 디렉터리의 보안 정보를 반환합니다.
SetAccessControl(DirectoryInfo, DirectorySecurity) 기존 디렉터리의 보안 특성을 변경합니다.

 

 

6.5 예제

 

6.5.1 예제 1

 

폴더 생성 후 삭제하는 예제입니다.

 

using UnityEngine;
using System;
using System.IO;

public class DirectoryInfoDemo : MonoBehaviour
{
    public DirectoryInfo di = new DirectoryInfo(@"D:\DirectoryInfo");

    void Start()
    {
        try
        {
            if (di.Exists)
            {
                Debug.Log("That path exists already.");
                return;
            }
                        
            di.Create();
            Debug.Log("The directory was created successfully.");

            di.Delete();
            Debug.Log("The directory was deleted successfully.");
        }

        catch (Exception e)
        {
            Debug.LogFormat("The process failed: {0}", e.ToString());
        }

        finally { }
    }
}

 

 

6.5.2 예제 2

 

 디렉터리와 해당 콘텐츠를 복사 하는 방법을 보여 줍니다

 

using UnityEngine;
using System;
using System.IO;

public class DirectoryInfoDemo : MonoBehaviour
{
    public string m_SourceDirectory = @"D:\SourceDirectory";
    public string m_TargetDirectory = @"D:\TargetDirectory";

    void Start()
    {
        DirectoryInfo diSource = new DirectoryInfo(m_SourceDirectory);
        DirectoryInfo diTarget = new DirectoryInfo(m_TargetDirectory);

        CopyAll(diSource, diTarget);
    }

    public void CopyAll(DirectoryInfo source, DirectoryInfo target)
    {
        if (source.FullName.ToLower() == target.FullName.ToLower())
        {
            return;
        }

        if (Directory.Exists(target.FullName) == false)
        {
            Directory.CreateDirectory(target.FullName);
        }

        foreach (FileInfo fi in source.GetFiles())
        {
            Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
            fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
        }

        foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
        {
            DirectoryInfo nextTargetSubDir =
                target.CreateSubdirectory(diSourceSubDir.Name);
            CopyAll(diSourceSubDir, nextTargetSubDir);
        }
    }
}

 

 

6.5.3 예제 3

 

 디렉터리가 없으면 생성하는 예제입니다.

 

using UnityEngine;
using System.IO;

public class DirectoryInfoDemo : MonoBehaviour
{
    public string m_Path = @"D:\Test";

    void Start()
    {
        DirectoryInfo di = new DirectoryInfo(m_Path);
        if (!di.Exists)
        {
            di.Create();
        }
    }
}

 

 

7. Path 클래스

 

파일이나 디렉터리 경로 정보를 포함하는 string 인스턴스에 대한 작업을 수행합니다. 

 

 

7.1  필드

 

필드 내용
AltDirectorySeparatorChar 계층적 파일 시스템 구조를 반영하는 경로 문자열에서 디렉터리 수준을 구분하는 사용되는 플랫폼 특정 대체 문자를 제공합니다.
DirectorySeparatorChar 계층적 파일 시스템 구조를 반영하는 경로 문자열에서 디렉터리 수준을 구분하는 사용되는 플랫폼 특정 문자를 제공합니다.
PathSeparator 환경 변수에서 경로 문자열을 구분하는 사용되는 플랫폼 특정 구분 문자입니다.
VolumeSeparatorChar 플랫폼 특정 볼륨 구분 기호 문자를 제공합니다.

 

 

7.2 메서드

 

메서드 내용
ChangeExtension(String, String) 경로 문자열의 확장명을 변경합니다.
Combine(String, String) 문자열을 경로로 결합합니다.
Combine(String, String, String) 문자열을 경로로 결합합니다.
Combine(String, String, String, String) 문자열을 경로로 결합합니다.
Combine(String[]) 문자열 배열을 경로로 결합합니다.
EndsInDirectorySeparator(ReadOnlySpan<Char>) 읽기 전용 범위로 지정된 경로가 디렉터리 구분 기호에서 끝나는지 여부를 나타내는 값을 반환합니다.
EndsInDirectorySeparator(String) 지정된 경로가 디렉터리 구분 기호로 끝나는지 여부를 나타내는 값을 반환합니다.
GetDirectoryName(ReadOnlySpan<Char>) 문자 범위로 표시되는 지정된 경로의 디렉터리 정보를 반환합니다.
GetDirectoryName(String) 지정된 경로에 대한 디렉터리 정보를 반환합니다.
GetExtension(ReadOnlySpan<Char>) 읽기 전용 문자 범위로 표시되는 파일 경로의 확장명을 반환합니다.
GetExtension(String) 지정된 경로 문자열의 확장명(마침표 "." 포함) 반환합니다.
GetFileName(ReadOnlySpan<Char>) 읽기 전용 문자 범위로 표시되는 파일 경로의 파일 이름 확장명을 반환합니다.
GetFileName(String) 지정된 경로 문자열에서 파일 이름과 확장명을 반환합니다.
GetFileNameWithoutExtension(ReadOnlySpan<Char>) 읽기 전용 문자 범위로 표시되는 파일 경로의 확장명 없는 파일 이름을 반환합니다.
GetFileNameWithoutExtension(String) 확장명 없이 지정된 경로 문자열의 파일 이름을 반환합니다.
GetFullPath(String) 지정된 경로 문자열에 대한 절대 경로를 반환합니다.
GetFullPath(String, String) 상대 경로와 정규화된 기본 경로에서 절대 경로를 반환합니다.
GetInvalidFileNameChars() 파일 이름에 사용할 없는 문자가 포함된 배열을 가져옵니다.
GetInvalidPathChars() 경로 이름에 사용할 없는 문자가 포함된 배열을 가져옵니다.
GetPathRoot(ReadOnlySpan<Char>) 지정된 문자 범위에 포함된 경로에서 루트 디렉터리 정보를 가져옵니다.
GetPathRoot(String) 지정된 문자열에 포함된 경로로부터 루트 디렉터리 정보를 가져옵니다.
GetRandomFileName() 임의의 폴더 이름 또는 파일 이름을 반환합니다.
GetRelativePath(String, String) 경로에서 다른 경로까지 상대 경로를 반환합니다.
GetTempFileName() 디스크에 크기가 0바이트인 고유한 이름의 임시 파일을 만들고 해당 파일의 전체 경로를 반환합니다.
GetTempPath() 현재 사용자의 임시 폴더 경로를 반환합니다.
HasExtension(ReadOnlySpan<Char>) 지정된 문자 범위로 표시되는 경로에 파일 이름 확장명이 포함되는지 확인합니다.
HasExtension(String) 경로에 파일 확장명이 포함된지를 확인합니다.
IsPathFullyQualified(ReadOnlySpan<Char>) 지정된 문자 범위로 표시되는 파일 경로가 특정 드라이브 또는 UNC 경로에 고정되었는지 여부를 나타내는 값을 반환합니다.
IsPathFullyQualified(String) 지정된 파일 경로가 특정 드라이브 또는 UNC 경로에 고정되었는지 여부를 나타내는 값을 반환합니다.
IsPathRooted(ReadOnlySpan<Char>) 파일 경로를 나타내는 지정된 문자 범위가 루트를 포함하는지 여부를 나타내는 값을 반환합니다.
IsPathRooted(String) 지정된 경로 문자열에 루트가 포함되는지 여부를 나타내는 값을 반환합니다.
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>) 경로 구성 요소를 단일 경로로 연결합니다.
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) 개의 경로 구성 요소를 단일 경로로 연결합니다.
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) 경로 구성 요소를 단일 경로로 연결합니다.
Join(String, String) 경로를 단일 경로에 연결합니다.
Join(String, String, String) 개의 경로를 단일 경로에 연결합니다.
Join(String, String, String, String) 경로를 단일 경로에 연결합니다.
Join(String[]) 경로 배열을 단일 경로로 연결합니다.
TrimEndingDirectorySeparator(ReadOnlySpan<Char>) 지정된 경로의 루트를 벗어나는 후행 디렉터리 구분 기호를 하나 잘라냅니다.
TrimEndingDirectorySeparator(String) 지정된 경로의 루트를 벗어나는 후행 디렉터리 구분 기호를 하나 잘라냅니다.
TryJoin(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, Span<Char>, Int32) 개의 경로 구성 요소를 미리 할당된 단일 문자 범위로 연결하려고 시도하고 작업이 성공했는지 여부를 나타내는 값을 반환합니다.
TryJoin(ReadOnlySpan<Char>, ReadOnlySpan<Char>, Span<Char>, Int32) 개의 경로 구성 요소를 미리 할당된 단일 문자 범위로 연결하려고 시도하고 작업이 성공했는지 여부를 나타내는 값을 반환합니다.

 

 

7.3 예제

 

using UnityEngine;
using System.IO;

public class PathDemo : MonoBehaviour
{
    public string m_Path1 = @"c:\temp\MyTest.txt";
    public string m_Path2 = @"c:\temp\MyTest";
    public string m_Path3 = @"temp";

    void Start()
    {
        if (Path.HasExtension(m_Path1))
        {
            Debug.LogFormat("{0} has an extension.", m_Path1);
        }

        if (!Path.HasExtension(m_Path2))
        {
            Debug.LogFormat("{0} has no extension.", m_Path2);
        }

        if (!Path.IsPathRooted(m_Path3))
        {
            Debug.LogFormat("The string {0} contains no root information.", m_Path3);
        }

        Debug.LogFormat("The full path of {0} is {1}.", m_Path3, Path.GetFullPath(m_Path3));
        Debug.LogFormat("{0} is the location for temporary files.", Path.GetTempPath());
        Debug.LogFormat("{0} is a file available for use.", Path.GetTempFileName());
    }
}

 

 

8. 텍스트 파일

텍스트 파일은 File 클래스와 StreamReader 클래스, StreamWriter 클래스를 사용하여 읽고 씁니다.

 

8.1 File 클래스

 

File 클래스는 파일을 간단하게 읽고 쓰는 메서드를 제공합니다.

 

 

8.1.1 예제 1

 

다음 예제는 새 파일에 텍스트를 쓰고 동일한 파일에 새 텍스트 줄을 추가하는 방법과 읽는 예제입니다.

 

using UnityEngine;
using System;
using System.IO;

public class FileDemo : MonoBehaviour
{
    void Start()
    {
        // 파일 클래스로 쓰기
        string text = "First line" + Environment.NewLine;
        string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        string textFilePath = Path.Combine(docPath, "WriteFile.txt");
        File.WriteAllText(textFilePath, text);
        string[] lines = { "New line 1", "New line 2" };
        File.AppendAllLines(Path.Combine(docPath, "WriteFile.txt"), lines);

        // 파일 클래스로 읽기
        string readAllText = File.ReadAllText(textFilePath);
        Debug.Log(readAllText);

        string[] allLines = File.ReadAllLines(textFilePath);
        for (int i = 0; i < allLines.Length; i++)
        {
            Debug.Log(allLines[i]);
        }
    }
}

 

 

8.1.2 예제 2

 

다음 예제는 파일는 클래스를 Byte 배열로 변환하여 저장하고, Byte 배열을 읽은 뒤 다시 클래스로 변환하여 읽는 예제입니다.

 

using UnityEngine;
using System.IO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
[Serializable]
public class Data
{
    [MarshalAs(UnmanagedType.Bool)]
    public bool m_BoolVariable;
    public int m_IntVariable;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
    public int[] m_IntArray;
    public float m_FloatlVariable;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string m_StringlVariable;
}

public class FileDemo : MonoBehaviour
{
    public string m_FilePath = @"D:\File IO\File Example.txt";

    void Start()
    {
        // 폴더가 존재하지 않으면 생성.
        if (!File.Exists(m_FilePath))
        {
            Directory.CreateDirectory(Path.GetDirectoryName(m_FilePath));
        }

        // Write 데이터 생성
        Data writeData = new Data();
        writeData.m_BoolVariable = true;
        writeData.m_IntVariable = 1024;
        writeData.m_IntArray = new int[2];
        writeData.m_IntArray[0] = 32;
        writeData.m_IntArray[1] = 64;
        writeData.m_FloatlVariable = 10000;
        writeData.m_StringlVariable = "Coder Zero";

        // 파일 저장
        byte[] writeBytes = ClassToByteArray(writeData);
        File.WriteAllBytes(m_FilePath, writeBytes);

        // 파일 읽기
        byte[] readBytes = File.ReadAllBytes(m_FilePath);
        Data readData = ByteArrayToClass<Data>(readBytes);
        Debug.Log(readData.m_BoolVariable);
        Debug.Log(readData.m_IntVariable);
        Debug.Log(readData.m_IntArray[0]);
        Debug.Log(readData.m_IntArray[1]);
        Debug.Log(readData.m_FloatlVariable);
        Debug.Log(readData.m_StringlVariable);
    }

    byte[] ClassToByteArray(object obj)
    {
        int size = Marshal.SizeOf(obj);
        byte[] arr = new byte[size];
        IntPtr ptr = Marshal.AllocHGlobal(size);

        Marshal.StructureToPtr(obj, ptr, true);
        Marshal.Copy(ptr, arr, 0, size);
        Marshal.FreeHGlobal(ptr);
        return arr;
    }

    T ByteArrayToClass<T>(byte[] buffer) where T : class
    {
        int size = Marshal.SizeOf(typeof(T));
        if (size > buffer.Length)
        {
            throw new Exception();
        }

        IntPtr ptr = Marshal.AllocHGlobal(size);
        Marshal.Copy(buffer, 0, ptr, size);
        T obj = (T)Marshal.PtrToStructure(ptr, typeof(T));
        Marshal.FreeHGlobal(ptr);
        return obj;
    }
}

 

 

8.2 StreamReader 클래스, StreamWriter 클래스

 

StreamReader, StreamWriter 클래스는 텍스트 파일을 처리하는 기능을 가진 클래스입니다.

 

8.2.1 StreamReader 클래스

 

8.2.1.1 StreamReader 생성자

 

생성자 내용
StreamReader(Stream) 지정된 스트림에 대한 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(Stream, Boolean) 지정한 바이트 순서 표시 검색 옵션을 사용하여 지정된 스트림에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(Stream, Encoding) 지정된 문자 인코딩을 사용하여 지정된 스트림에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(Stream, Encoding, Boolean) 지정된 문자 인코딩과 바이트 순서 표시 검색 옵션을 사용하여 특정 스트림에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(Stream, Encoding, Boolean, Int32) 지정된 문자 인코딩과 바이트 순서 표시 검색 옵션, 버퍼 크기를 사용하여 특정 스트림에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(Stream, Encoding, Boolean, Int32, Boolean) 지정된 문자 인코딩과 바이트 순서 표시 검색 옵션, 버퍼 크기를 기반으로 지정된 스트림에 대해 StreamReader 클래스의 새 인스턴스를 초기화하고 스트림을 선택적으로 연 상태로 둡니다.
StreamReader(String) 지정된 파일 이름에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(String, Boolean) 지정한 바이트 순서 표시 검색 옵션을 사용하여 지정한 파일 이름에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(String, Encoding) 지정된 문자 인코딩을 사용하여 지정된 파일 이름에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(String, Encoding, Boolean) 지정한 문자 인코딩과 바이트 순서 표시 검색 옵션을 사용하여 지정된 파일 이름에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.
StreamReader(String, Encoding, Boolean, Int32) 지정된 문자 인코딩과 바이트 순서 표시 검색 옵션을 사용하여 지정된 파일 이름에 대해 StreamReader 클래스의 새 인스턴스를 초기화합니다.

 


8.2.1.2 StreamReader 속성

 

속성 내용
BaseStream 내부 스트림을 반환합니다.
CurrentEncoding 현재 StreamReader 개체에서 사용 중인 현재 문자 인코딩을 가져옵니다.
EndOfStream 현재 스트림 위치가 스트림의 끝에 있는지를 나타내는 값을 가져옵니다.

 


8.2.1.3 StreamReader 메서드

 

메서드 내용
Close() StreamReader 개체와 내부 스트림을 닫고 판독기와 관련된 모든 시스템 리소스를 해제합니다.
CreateObjRef(Type) 원격 개체와 통신하는 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.
DiscardBufferedData() 내부 버퍼를 지웁니다.
Dispose() 해당 TextReader 개체에서 사용하는 리소스를 모두 해제합니다.
Dispose(Boolean) 내부 스트림을 닫고 StreamReader에서 사용하는 관리되지 않는 리소스를 해제하고 관리되는 리소스를 선택적으로 해제할 수 있습니다.
Equals(Object) 지정된 개체가 현재 개체와 같은지 확인합니다.
GetHashCode() 기본 해시 함수로 작동합니다.
GetType() 현재 인스턴스의 Type을 가져옵니다.
MemberwiseClone() 현재 Object의 단순 복사본을 만듭니다.
MemberwiseClone(Boolean) 현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.
Peek() 사용할 있는 다음 문자를 반환하지만 사용하지는 않습니다.
Read() 입력 스트림에서 다음 문자를 읽고 문자 위치를 문자씩 앞으로 이동합니다.
Read(Char[], Int32, Int32) 현재 스트림에서 지정된 최대 문자를 지정된 인덱스부터 버퍼로 읽어 들입니다.
Read(Span<Char>) 현재의 스트림에서 범위로 문자를 읽어 들입니다.
ReadAsync(Char[], Int32, Int32) 현재 스트림에서 지정된 최대 수의 문자를 비동기적으로 읽어 데이터를 지정된 인덱스에서 시작되는 버퍼에 씁니다.
ReadAsync(Memory<Char>, CancellationToken) 현재의 스트림에서 메모리 블록으로 문자를 비동기적으로 읽어 들입니다.
ReadBlock(Char[], Int32, Int32) 현재 스트림에서 지정된 최대 수의 문자를 읽어 데이터를 지정된 인덱스에서 시작되는 버퍼에 씁니다.
ReadBlock(Span<Char>) 현재의 스트림에서 문자를 읽고, 버퍼에 데이터를 씁니다.
ReadBlockAsync(Char[], Int32, Int32) 현재 스트림에서 지정된 최대 수의 문자를 비동기적으로 읽어 데이터를 지정된 인덱스에서 시작되는 버퍼에 씁니다.
ReadBlockAsync(Memory<Char>, CancellationToken) 현재의 스트림에서 비동기적으로 문자를 읽고, 버퍼에 데이터를 씁니다.
ReadLine() 현재 스트림에서 줄의 문자를 읽고 데이터를 문자열로 반환합니다.
ReadLineAsync() 현재 스트림에서 줄의 문자를 비동기적으로 읽고 데이터를 문자열로 반환합니다.
ReadToEnd() 현재 위치부터 스트림 끝까지의 모든 문자를 읽습니다.
ReadToEndAsync() 현재 위치부터 스트림 끝까지의 모든 문자를 비동기적으로 읽어서 이를 하나의 문자열로 반환합니다.
ToString() 현재 개체를 나타내는 문자열을 반환합니다.

 

 

8.2.2 StreamWriter 클래스

 

8.2.2.1 StreamWriter 생성자

 

생성자 내용
StreamWriter(Stream) UTF-8 인코딩과 기본 버퍼 크기를 사용하여 지정된 스트림에 대해 StreamWriter 클래스의 새 인스턴스를 초기화합니다.
StreamWriter(Stream, Encoding) 지정된 인코딩과 기본 버퍼 크기를 사용하여 지정된 스트림에 대한 StreamWriter 클래스의 새 인스턴스를 초기화합니다.
StreamWriter(Stream, Encoding, Int32) 지정된 인코딩과 버퍼 크기를 사용하여 지정된 스트림에 대한 StreamWriter 클래스의 새 인스턴스를 초기화합니다.
StreamWriter(Stream, Encoding, Int32, Boolean) 지정된 인코딩과 기본 버퍼 크기를 사용하여 지정된 스트림에 대한 StreamWriter 클래스의 새 인스턴스를 초기화하며, 선택적으로 스트림을 연 상태로 둘 수 있습니다.
StreamWriter(String) 기본 인코딩 및 버퍼 크기를 사용하여 지정된 파일에 대해 StreamWriter 클래스의 새 인스턴스를 초기화합니다.
StreamWriter(String, Boolean) 기본 인코딩 및 버퍼 크기를 사용하여 지정된 파일에 대해 StreamWriter 클래스의 새 인스턴스를 초기화합니다해당 파일이 있으면 덮어쓰거나 추가합니다해당 파일이 없으면 이 생성자는 새 파일을 만듭니다.
StreamWriter(String, Boolean, Encoding) 지정된 인코딩 및 기본 버퍼 크기를 사용하여 지정된 파일에 대해 StreamWriter 클래스의 새 인스턴스를 초기화합니다해당 파일이 있으면 덮어쓰거나 추가합니다해당 파일이 없으면 이 생성자는 새 파일을 만듭니다.
StreamWriter(String, Boolean, Encoding, Int32) 지정된 인코딩과 버퍼 크기를 사용하여 지정 경로의 지정 파일에 대한 StreamWriter 클래스의 새 인스턴스를 초기화합니다해당 파일이 있으면 덮어쓰거나 추가합니다해당 파일이 없으면 이 생성자는 새 파일을 만듭니다.

 

 

8.2.2.2 StreamWriter 속성

 

속성 내용
AutoFlush StreamWriter Write(Char) 호출할 때마다 해당 버퍼를 내부 스트림에 플러시할지 여부를 나타내는 값을 가져오거나 설정합니다.
BaseStream 백업 저장소의 인터페이스 역할을 하는 내부 스트림을 가져옵니다.
Encoding 출력이 쓰여질 Encoding을 가져옵니다.
FormatProvider 서식 지정을 제어하는 개체를 가져옵니다.
NewLine 현재 TextWriter에서 사용한 종결자 문자열을 가져오거나 설정합니다.

 


8.2.2.3 StreamWriter 메서드

 

메서드 내용
Close() 현재 StreamWriter 개체 내부 스트림을 닫습니다.
CreateObjRef(Type) 원격 개체와 통신하는 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.
Dispose() 해당 TextWriter 개체에서 사용하는 리소스를 모두 해제합니다.
Dispose(Boolean) 버퍼링된 데이터가 기본 스트림에 작성되고, StreamWriter에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제합니다.
DisposeAsync() 버퍼링된 모든 데이터를 기본 스트림에 비동기식으로 쓰고 StreamWriter에서 사용한 비관리형 리소스를 해제합니다.
Equals(Object) 지정된 개체가 현재 개체와 같은지 확인합니다.
Flush() 현재 writer 모든 버퍼를 지우면 버퍼링된 모든 데이터가 내부 스트림에 쓰여집니다.
FlushAsync() 스트림에 대한 모든 버퍼를 비동기적으로 지우고 버퍼링된 모든 데이터가 내부 디바이스에 비동기적으로 쓰여지도록 합니다.
GetHashCode() 기본 해시 함수로 작동합니다.
GetType() 현재 인스턴스의 Type을 가져옵니다.
MemberwiseClone() 현재 Object의 단순 복사본을 만듭니다.
MemberwiseClone(Boolean) 현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.
ToString() 현재 개체를 나타내는 문자열을 반환합니다.
Write(Boolean) Boolean 값의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(Char) 스트림에 문자를 씁니다.
Write(Char[]) 스트림에 문자 배열을 씁니다.
Write(Char[], Int32, Int32) 스트림에 문자의 하위 배열을 씁니다.
Write(Decimal) 10진수 값의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(Double) 8바이트 부동 소수점 값의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(Int32) 부호 있는 4바이트 정수의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(Int64) 부호 있는 8바이트 정수의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(Object) 개체에 대해 ToString 메서드를 호출하여 해당 개체의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(ReadOnlySpan<Char>) 스트림에 문자 범위를 씁니다.
Write(Single) 4바이트 부동 소수점 값의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(String) 스트림에 문자열을 씁니다.
Write(String, Object) Format(String, Object) 메서드와 동일한 의미 체계를 사용하여 서식이 지정된 문자열을 스트림에 씁니다.
Write(String, Object, Object) Format(String, Object, Object) 메서드와 동일한 의미 체계를 사용하여 서식이 지정된 문자열을 스트림에 씁니다.
Write(String, Object, Object, Object) Format(String, Object, Object, Object) 메서드와 동일한 의미 체계를 사용하여 서식이 지정된 문자열을 스트림에 씁니다.
Write(String, Object[]) Format(String, Object[]) 메서드와 동일한 의미 체계를 사용하여 서식이 지정된 문자열을 스트림에 씁니다.
Write(StringBuilder) 텍스트 스트림에 문자열 작성기를 씁니다.
Write(UInt32) 부호 없는 4바이트 정수의 텍스트 표현을 텍스트 스트림에 씁니다.
Write(UInt64) 부호 없는 8바이트 정수의 텍스트 표현을 텍스트 스트림에 씁니다.
WriteAsync(Char) 문자를 스트림에 비동기식으로 씁니다.
WriteAsync(Char[]) 문자 배열을 텍스트 스트림에 비동기식으로 씁니다.
WriteAsync(Char[], Int32, Int32) 문자의 하위 배열을 스트림에 비동기식으로 씁니다.
WriteAsync(ReadOnlyMemory<Char>, CancellationToken) 문자 메모리 영역을 스트림에 비동기식으로 씁니다.
WriteAsync(String) 문자열을 스트림에 비동기식으로 씁니다.
WriteAsync(StringBuilder, CancellationToken) 텍스트 스트림에 문자열 작성기를 비동기식으로 씁니다.
WriteLine() 종결자를 텍스트 스트림에 씁니다.
WriteLine(Boolean) 텍스트 스트림에 종결자가 다음에 오도록 Boolean 값의 텍스트 표현을 씁니다.
WriteLine(Char) 텍스트 스트림에 종결자가 다음에 오도록 문자를 씁니다.
WriteLine(Char[]) 문자의 배열과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(Char[], Int32, Int32) 텍스트 스트림에 종결자가 다음에 오도록 문자의 하위 배열을 씁니다.
WriteLine(Decimal) 10진수 값의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(Double) 8바이트 부동 소수점 값의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(Int32) 부호 있는 4바이트 정수의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(Int64) 부호 있는 8바이트 정수의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(Object) 개체에 대해 ToString 메서드를 호출하여 해당 개체의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(ReadOnlySpan<Char>) 스트림에 종결자가 다음에 오도록 문자 범위의 텍스트 표현을 씁니다.
WriteLine(Single) 4바이트 부동 소수점 값의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(String) 문자열과 종결자를 차례로 스트림에 씁니다.
WriteLine(String, Object) Format(String, Object) 메서드와 동일한 의미 체계를 사용하여 서식이 지정된 문자열과 새 줄을 스트림에 씁니다.
WriteLine(String, Object, Object) Format(String, Object, Object) 메서드와 동일한 의미 체계를 사용하여 서식이 지정된 문자열과 새 줄을 스트림에 씁니다.
WriteLine(String, Object, Object, Object) Format(String, Object)와 동일한 의미 체계를 사용하여 서식이 지정된 문자열과 새 줄을 스트림에 씁니다.
WriteLine(String, Object[]) Format(String, Object)와 동일한 의미 체계를 사용하여 서식이 지정된 문자열과 새 줄을 스트림에 씁니다.
WriteLine(StringBuilder) 문자열 빌더의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(UInt32) 부호 없는 4바이트 정수의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLine(UInt64) 부호 없는 8바이트 정수의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 씁니다.
WriteLineAsync() 종결자를 스트림에 비동기식으로 씁니다.
WriteLineAsync(Char) 스트림에 종결자가 다음에 오도록 비동기식으로 문자를 씁니다.
WriteLineAsync(Char[]) 문자의 배열과 종결자를 차례로 텍스트 스트림에 비동기식으로 씁니다.
WriteLineAsync(Char[], Int32, Int32) 문자의 하위 배열과 종결자를 차례로 스트림에 비동기식으로 씁니다.
WriteLineAsync(ReadOnlyMemory<Char>, CancellationToken) 스트림에 종결자가 다음에 오도록 문자 메모리 범위의 텍스트 표현을 비동기식으로 씁니다.
WriteLineAsync(String) 스트림에 종결자가 다음에 오도록 비동기식으로 문자열을 씁니다.
WriteLineAsync(StringBuilder, CancellationToken) 문자열 빌더의 텍스트 표현과 종결자를 차례로 텍스트 스트림에 비동기식으로 씁니다.

 

 

8.2.2.4  예제 

 

8.2.2.4.1  예제 1

 

using UnityEngine;
using System;
using System.IO;

public class StreamReaderAndStreamWriterDemo : MonoBehaviour
{
    public string m_FilePath = @"D:\File IO\File Example.txt";


    void Start()
    {
        // 폴더가 존재하지 않으면 생성.
        if (!File.Exists(m_FilePath))
        {
            Directory.CreateDirectory(Path.GetDirectoryName(m_FilePath));
        }

        string[] lines = { "First line", "Second line", "Third line" };

        string docPath =
          Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

        using (StreamWriter outputFile = new StreamWriter(m_FilePath))
        {
            foreach (string line in lines)
                outputFile.WriteLine(line);
        }

        using (var sr = new StreamReader(m_FilePath))
        {
            Debug.Log(sr.ReadToEnd());
        }
    }
}

 

 

8.2.2.4.2  예제 2

 

다음 예제는 C 드라이브에 있는 디렉터리를 나열 하는 파일을 작성 한 다음, 각 디렉터리 이름을 읽는 예제입니다.

 

using UnityEngine;
using System.IO;

public class StreamReaderAndStreamWriterDemo : MonoBehaviour
{
    DirectoryInfo[] cDirs = new DirectoryInfo(@"c:\").GetDirectories();
        
    void Start()
    {
        using (StreamWriter sw = new StreamWriter("CDriveDirs.txt"))
        {
            foreach (DirectoryInfo dir in cDirs)
            {
                sw.WriteLine(dir.Name);
            }
        }

        string line = "";
        using (StreamReader sr = new StreamReader("CDriveDirs.txt"))
        {
            while ((line = sr.ReadLine()) != null)
            {
                Debug.Log(line);
            }
        }
    }
}

 

 

8.2.2.4.3  예제 3

 

다음예제는 글래스를 문자열로 저장하였다가 읽는 예제입니다ㅓ.

 

using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Text;
using System.Runtime.InteropServices;

[Serializable]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]

public class Data
{
    [MarshalAs(UnmanagedType.Bool)]
    public bool m_BoolVariable;
    public int m_IntVariable;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
    public int[] m_IntArray;
    public float m_FloatlVariable;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
    public string m_StringlVariable;
}

public class StreamReaderAndStreamWriterDemo : MonoBehaviour
{
    public string m_FilePath = @"D:\File IO\StreamReaderAndWrite Example.txt";

    void Start()
    {
        // 폴더가 존재하지 않으면 생성.
        if (!File.Exists(m_FilePath))
        {
            Directory.CreateDirectory(Path.GetDirectoryName(m_FilePath));
        }

        using (StreamWriter wirter = new StreamWriter(m_FilePath))
        {
            // Write 데이터 생성
            Data[] writeData = new Data[2];

            // 라인 1
            writeData[0] = new Data();
            writeData[0].m_BoolVariable = true;
            writeData[0].m_IntVariable = 1024;
            writeData[0].m_IntArray = new int[2];
            writeData[0].m_IntArray[0] = 32;
            writeData[0].m_IntArray[1] = 64;
            writeData[0].m_FloatlVariable = 10000;
            writeData[0].m_StringlVariable = "Coder Zero";

            // 라인 2
            writeData[1] = new Data();
            writeData[1].m_BoolVariable = false;
            writeData[1].m_IntVariable = 1025;
            writeData[1].m_IntArray = new int[2];
            writeData[1].m_IntArray[0] = 33;
            writeData[1].m_IntArray[1] = 65;
            writeData[1].m_FloatlVariable = 10001;
            writeData[1].m_StringlVariable = "Coder Zero 1";

            for (int i = 0; i < writeData.Length; i++)
            {
                wirter.WriteLine(
                    $"{writeData[i].m_BoolVariable} {writeData[i].m_IntVariable} {writeData[i].m_IntArray[0]} {writeData[i].m_IntArray[1]} {writeData[i].m_FloatlVariable} {writeData[i].m_StringlVariable}");
            }
        }

        List<string> readerLines = new List<string>();
        using (StreamReader reader = new StreamReader(m_FilePath))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                readerLines.Add(line);
            }
        }

        for (int i = 0; i < readerLines.Count; i++)
        {
            Debug.Log(readerLines[i]);
        }
    }
}

 

 

9. 이진 파일(바이러리 파일, Binary File)

 

이진 파일은 BinaryReader, BinaryWriter 클래스를 사용하여 읽고 씁니다.

 

9.1 BinaryReader 클래스

 

9.1.1 BinaryReader 생성자

 

생성자 내용
BinaryWriter() 스트림에 쓰는 BinaryWriter 클래스의 새 인스턴스를 초기화합니다.
BinaryWriter(Stream) 지정된 스트림을 기반으로 UTF-8 인코딩을 사용하여 BinaryWriter 클래스의 새 인스턴스를 초기화합니다.
BinaryWriter(Stream, Encoding) 지정된 스트림과 문자 인코딩을 기반으로 BinaryWriter 클래스의 새 인스턴스를 초기화합니다.
BinaryWriter(Stream, Encoding, Boolean) 지정된 스트림과 문자 인코딩을 기반으로 하는 BinaryWriter 클래스의 새 인스턴스를 초기화하고 스트림을 선택적으로 연 상태로 둡니다.

 

 

9.1.2 BinaryReader 메서드

 

메서드 내용
Close() 현재 BinaryWriter 및 기본 스트림을 닫습니다.
Dispose() BinaryWriter 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다.
Dispose(Boolean) BinaryWriter에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다.
DisposeAsync() BinaryWriter 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 비동기식으로 해제합니다.
Equals(Object) 지정된 개체가 현재 개체와 같은지 확인합니다.
Flush() 현재 작성기에 대한 모든 버퍼를 지우면 버퍼링된 모든 데이터를 내부 디바이스에 씁니다.
GetHashCode() 기본 해시 함수로 작동합니다.
GetType() 현재 인스턴스의 Type을 가져옵니다.
MemberwiseClone() 현재 Object의 단순 복사본을 만듭니다.
Seek(Int32, SeekOrigin) 현재 스트림 내에서 위치를 설정합니다.
ToString() 현재 개체를 나타내는 문자열을 반환합니다.
Write(Boolean) Boolean 나타내는 0 false 나타내는 1 사용하여 1바이트 true 값을 현재 스트림에 씁니다.
Write(Byte) 부호 없는 바이트를 현재 스트림에 쓰고 스트림 위치를 1바이트씩 앞으로 이동합니다.
Write(Byte[]) 내부 스트림에 바이트 배열을 씁니다.
Write(Byte[], Int32, Int32) 현재 스트림에 바이트 배열 영역을 씁니다.
Write(Char) 유니코드 문자를 현재 스트림에 다음 사용된 Encoding 스트림에 쓰여지는 특정 문자의 길이만큼 스트림의 현재 위치를 앞으로 이동합니다.
Write(Char[]) 문자 배열을 현재 스트림에 다음 사용된 Encoding 스트림에 쓰여지는 특정 문자의 길이만큼 스트림의 현재 위치를 앞으로 이동합니다.
Write(Char[], Int32, Int32) 문자 배열 섹션을 현재 스트림에 다음 사용된 Encoding 스트림에 쓰여지는 특정 문자의 길이만큼 스트림의 현재 위치를 앞으로 이동합니다.
Write(Decimal) 10 값을 현재 스트림에 쓰고 스트림 위치를 16바이트씩 앞으로 이동합니다.
Write(Double) 8바이트 부동 소수점 값을 현재 스트림에 쓰고 스트림 위치를 8바이트씩 앞으로 이동합니다.
Write(Int16) 2바이트 부호 있는 정수를 현재 스트림에 쓰고 스트림 위치를 2바이트씩 앞으로 이동합니다.
Write(Int32) 4바이트 부호 있는 정수를 현재 스트림에 쓰고 스트림 위치를 4바이트씩 앞으로 이동합니다.
Write(Int64) 8바이트 부호 있는 정수를 현재 스트림에 쓰고 스트림 위치를 8바이트씩 앞으로 이동합니다.
Write(ReadOnlySpan<Byte>) 현재 스트림에 바이트 범위를 씁니다.
Write(ReadOnlySpan<Char>) 문자 범위를 현재 스트림에 다음 사용된 Encoding 스트림에 쓰여지는 특정 문자의 길이만큼 스트림의 현재 위치를 앞으로 이동합니다.
Write(SByte) 부호 있는 바이트를 현재 스트림에 쓰고 스트림 위치를 1바이트씩 앞으로 이동합니다.
Write(Single) 4바이트 부동 소수점 값을 현재 스트림에 쓰고 스트림 위치를 4바이트씩 앞으로 이동합니다.
Write(String) BinaryWriter의 현재 인코딩으로 된 이 스트림에 문자열의 길이가 맨 앞에 나오는 문자열을 쓴 다음 사용된 인코딩과 스트림에 쓰여지는 특정 문자의 길이만큼 스트림의 현재 위치를 앞으로 이동합니다.
Write(UInt16) 2바이트 부호 없는 정수를 현재 스트림에 쓰고 스트림 위치를 2바이트씩 앞으로 이동합니다.
Write(UInt32) 4바이트 부호 없는 정수를 현재 스트림에 쓰고 스트림 위치를 4바이트씩 앞으로 이동합니다.
Write(UInt64) 8바이트 부호 없는 정수를 현재 스트림에 쓰고 스트림 위치를 8바이트씩 앞으로 이동합니다.
Write7BitEncodedInt(Int32) 압축 형식의 32비트 정수를 씁니다.
Write7BitEncodedInt64(Int64) 번에 7비트 숫자를 작성합니다.

 

9.1.3 예제

 

9.1.3.1 예제1

 

using UnityEngine;
using System.IO;

public class BinarReaderAndBinaryWriterDemo : MonoBehaviour
{
    string fileName = "AppSettings.dat";

    void Start()
    {
        using (BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create)))
        {
            writer.Write(1.250F);
            writer.Write(@"c:\Temp");
            writer.Write(10);
            writer.Write(true);
        }

        using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open)))
        {
            Debug.Log("Aspect ratio set to: " + reader.ReadSingle());
            Debug.Log("Temp directory is: " + reader.ReadString());
            Debug.Log("Auto save time set to: " + reader.ReadInt32());
            Debug.Log("Show status bar: " + reader.ReadBoolean());
        }
    }
}

 

 

10. FileStream 클래스

 

파일에 대해 Stream을 제공하여 동기 및 비동기 읽기/쓰기 작업을 모두 지원합니다.

 

10.1 FileStream 생성자

 

생성자 내용
FileStream(SafeFileHandle, FileAccess) 지정된 읽기/쓰기 권한을 사용하여 지정된 파일 핸들에 대한 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(SafeFileHandle, FileAccess, Int32) 지정된 읽기/쓰기 권한 및 버퍼 크기를 사용하여 지정된 파일 핸들에 대해 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(SafeFileHandle, FileAccess, Int32, Boolean) 지정된 읽기/쓰기 권한, 버퍼 크기 및 동기/비동기 상태를 사용하여 지정된 파일 핸들에 대해 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(String, FileMode) 지정된 경로 및 생성 모드들 사용하여 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(String, FileMode, FileAccess) 지정된 경로, 생성 모드 및 읽기/쓰기 권한을 사용하여 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(String, FileMode, FileAccess, FileShare) 지정된 경로, 생성 모드, 읽기/쓰기 권한 및 공유 권한을 사용하여 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(String, FileMode, FileAccess, FileShare, Int32) 지정된 경로, 생성 모드, 읽기/쓰기 및 공유 권한, 버퍼 크기를 사용하여 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) 지정된 경로, 생성 모드, 읽기/쓰기 및 공유 권한, 버퍼 크기 및 동기/비동기 상태를 사용하여 FileStream 클래스의 새 인스턴스를 초기화합니다.
FileStream(String, FileMode, FileAccess, FileShare, Int32, FileOptions) 지정된 경로, 생성 모드, 읽기/쓰기 및 공유 권한, 같은 파일에 대한 다른 FileStream의 액세스 권한, 버퍼 크기 및 추가 파일 옵션을 사용하여 FileStream 클래스의 새 인스턴스를 초기화합니다.

 

 

10.2 FileStream 속성

 

속성 내용
CanRead 현재 스트림이 읽기를 지원하는지 여부를 나타내는 값을 가져옵니다.
CanSeek 현재 스트림이 검색을 지원하는지 여부를 나타내는 값을 가져옵니다.
CanTimeout 현재 스트림이 시간 초과될 수 있는지를 결정하는 값을 가져옵니다.
CanWrite 현재 스트림이 쓰기를 지원하는지 여부를 나타내는 값을 가져옵니다.
IsAsync FileStream이 비동기적으로 열렸는지 또는 동기적으로 열렸는지 여부를 나타내는 값을 가져옵니다.
Length 스트림의 길이(바이트)를 가져옵니다.
Name FileStream에서 열린 파일의 절대 경로를 가져옵니다.
Position 이 스트림의 현재 위치를 가져오거나 설정합니다.
ReadTimeout 스트림 읽기 시도가 만료되기 전까지 기다릴 시간을 결정하는 값(밀리초)을 가져오거나 설정합니다.
SafeFileHandle 현재 FileStream 개체가 캡슐화하는 파일에 대한 운영 체제 파일 핸들을 나타내는 SafeFileHandle 개체를 가져옵니다.
WriteTimeout 스트림 쓰기 시도가 만료되기 전까지 기다릴 시간을 결정하는 값(밀리초)을 가져오거나 설정합니다.

 

 

10.3 FileStream 메서드

 

메서드 내용
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) 비동기 읽기 작업을 시작합니다대신 ReadAsync(Byte[], Int32, Int32, CancellationToken)을 사용하는 것이 좋습니다.
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) 비동기 쓰기 작업을 시작합니다대신 WriteAsync(Byte[], Int32, Int32, CancellationToken)을 사용하는 것이 좋습니다.
Close() 현재 스트림을 닫고 현재 스트림과 관련된 소켓과 파일 핸들 등의 리소스를 모두 해제합니다 메서드를 호출하는 대신 스트림이 올바르게 삭제되었는지 확인합니다.
CopyTo(Stream) 현재 스트림에서 바이트를 읽어서 다른 스트림에 해당 바이트를 씁니다.
CopyTo(Stream, Int32) 현재 스트림에서 바이트를 읽어서 지정된 버퍼 크기로 다른 스트림에 씁니다.
CopyToAsync(Stream) 현재 스트림에서 모든 바이트를 비동기적으로 읽어 다른 스트림에 씁니다.
CopyToAsync(Stream, CancellationToken) 현재 스트림에서 바이트를 비동기적으로 읽어 지정된 취소 토큰을 사용하여 다른 스트림에 씁니다.
CopyToAsync(Stream, Int32) 현재 스트림에서 바이트를 비동기적으로 읽어 지정된 버퍼 크기로 다른 스트림에 씁니다.
CopyToAsync(Stream, Int32, CancellationToken) 현재 파일 스트림에서 바이트를 비동기적으로 읽어 지정된 버퍼 크기 취소 토큰을 사용하여 다른 스트림에 씁니다.
CreateObjRef(Type) 원격 개체와 통신하는 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.
Dispose() Stream에서 사용하는 모든 리소스를 해제합니다.
Dispose(Boolean) FileStream에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다.
DisposeAsync() FileStream에서 사용하는 관리되지 않는 리소스를 비동기적으로 해제합니다.
EndRead(IAsyncResult) 보류 중인 비동기 읽기 작업이 완료되기를 기다립니다대신 ReadAsync(Byte[], Int32, Int32, CancellationToken)를 사용하세요.
EndWrite(IAsyncResult) 비동기 쓰기 작업을 종료하고 I/O 작업이 완료될 때까지 차단시킵니다대신 WriteAsync(Byte[], Int32, Int32, CancellationToken)를 사용하세요.
Equals(Object) 지정된 개체가 현재 개체와 같은지 확인합니다.
Finalize() 가비지 수집기에서 FileStream 회수할 리소스가 해제되고 다른 정리 작업이 수행되도록 합니다.
Flush() 스트림의 버퍼를 지우고 버퍼링된 모든 데이터가 파일에 쓰여지도록 합니다.
Flush(Boolean) 스트림에 대한 버퍼를 지우고 버퍼링된 모든 데이터가 파일에 쓰여지도록 하며 모든 중간 파일 버퍼도 지웁니다.
FlushAsync() 스트림에 대한 모든 버퍼를 비동기적으로 지우고 버퍼링된 모든 데이터가 내부 디바이스에 비동기적으로 쓰여지도록 합니다.
FlushAsync(CancellationToken) 스트림에 대해 모든 버퍼를 비동기적으로 지우고 버퍼링된 데이터가 내부 디바이스에 쓰여지도록 하고 취소 요청을 모니터링합니다.
GetHashCode() 기본 해시 함수로 작동합니다.
GetType() 현재 인스턴스의 Type을 가져옵니다.
Lock(Int64, Int64) 다른 프로세스가 FileStream을 읽거나 쓰지 못하게 합니다.
MemberwiseClone() 현재 Object의 단순 복사본을 만듭니다.
MemberwiseClone(Boolean) 현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.
Read(Byte[], Int32, Int32) 스트림에서 바이트 블록을 읽어서 해당 데이터를 제공된 버퍼에 씁니다.
Read(Span<Byte>) 현재 파일 스트림에서 바이트 시퀀스를 읽고 읽은 바이트 수만큼 파일 스트림에서 위치를 앞으로 이동합니다.
ReadAsync(Byte[], Int32, Int32) 현재 스트림에서 바이트 시퀀스를 읽고 읽은 바이트 수만큼 스트림에서 위치를 비동기적으로 앞으로 이동합니다.
ReadAsync(Byte[], Int32, Int32, CancellationToken) 현재 파일 스트림에서 바이트의 시퀀스를 비동기식으로 읽고, 이를 지정된 오프셋부터 시작하여 바이트 배열에 쓰며, 읽은 바이트 수만큼 파일 스트림 내에서 앞으로 이동하며, 취소 요청을 모니터링합니다.
ReadAsync(Memory<Byte>, CancellationToken) 현재 파일 스트림에서 바이트의 시퀀스를 비동기식으로 읽고, 이를 메모리 범위에 쓰고, 읽은 바이트 수만큼 파일 스트림 내에서 앞으로 이동하며, 취소 요청을 모니터링합니다.
ReadByte() 파일에서 1바이트를 읽고 읽기 위치를 1바이트만큼 앞으로 이동합니다.
Seek(Int64, SeekOrigin) 스트림의 현재 위치를 제공된 값으로 설정합니다.
SetLength(Int64) 스트림의 길이를 제공된 값으로 설정합니다.
ToString() 현재 개체를 나타내는 문자열을 반환합니다.
Unlock(Int64, Int64) 다른 프로세스에서 이전에 잠근 파일의 일부 또는 전부에 액세스할 있도록 합니다.
Write(Byte[], Int32, Int32) 바이트 블록을 파일 스트림에 씁니다.
Write(ReadOnlySpan<Byte>) 읽기 전용 범위에서 현재 파일 스트림으로 바이트 시퀀스를 쓰고 바이트 수만큼 파일 스트림에서 현재 위치를 앞으로 이동합니다.
WriteAsync(Byte[], Int32, Int32) 현재 스트림에 바이트 시퀀스를 비동기적으로 쓰고 바이트 수만큼 스트림에서 현재 위치를 앞으로 이동합니다.
WriteAsync(Byte[], Int32, Int32, CancellationToken) 바이트의 시퀀스를 현재 스트림에 비동기적으로 쓰고 쓰여진 바이트 수만큼 스트림 내의 현재 위치를 앞으로 이동한 취소 요청을 모니터링합니다.
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) 메모리 영역에서 바이트의 시퀀스를 현재 버퍼링된 스트림에 비동기적으로 쓰고, 바이트 수만큼 파일 스트림 내의 현재 위치를 앞으로 이동한 , 취소 요청을 모니터링합니다.
WriteByte(Byte) 파일 스트림의 현재 위치에 바이트를 씁니다.

 

 

10.4 예제

 

using UnityEngine;
using System;
using System.IO;
using System.Text;

public class FileStreamDemo : MonoBehaviour
{
    public string m_Path = @"D:\Temp";
    public string m_FileName = "FileStream.txt";


    void Start()
    {
        DirectoryInfo di = new DirectoryInfo(m_Path);
        if (!di.Exists)
        {
            di.Create();
        }


        using (FileStream fs = File.Create(Path.Combine(m_Path, m_FileName)))
        {
            AddText(fs, "This is some text");
            AddText(fs, "This is some more text,");
            AddText(fs, "\r\nand this is on a new line");
            AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n");

            for (int i = 1; i < 120; i++)
            {
                AddText(fs, Convert.ToChar(i).ToString());
            }
        }

        using (FileStream fs = File.OpenRead(Path.Combine(m_Path, m_FileName)))
        {
            byte[] b = new byte[1024];
            UTF8Encoding temp = new UTF8Encoding(true);
            while (fs.Read(b, 0, b.Length) > 0)
            {
                Debug.Log(temp.GetString(b));
            }
        }
    }

    void AddText(FileStream fs, string value)
    {
        byte[] info = new UTF8Encoding(true).GetBytes(value);
        fs.Write(info, 0, info.Length);
    }
}

 

 

11. MemoryStream 클래스

 

백업 저장소가 메모리인 스트림을 만듭니다.

 

11.1 FileStream 생성자

 

생성자 내용
MemoryStream() 0으로 초기화된 확장 가능한 용량을 사용하여 MemoryStream 클래스의 새 인스턴스를 초기화합니다.
MemoryStream(Byte[]) 지정된 바이트 배열을 기반으로 하는 MemoryStream 클래스의 크기 조정이 불가능한 새 인스턴스를 초기화합니다.
MemoryStream(Byte[], Boolean) 지정된 대로 설정된 MemoryStream 속성을 사용하여 지정된 바이트 배열을 기반으로 하는 CanWrite 클래스의 크기 조정이 불가능한 인스턴스를 초기화합니다.
MemoryStream(Byte[], Int32, Int32) 바이트 배열의 지정된 영역(인덱스)을 기반으로 하는 MemoryStream 클래스의 크기 조정이 불가능한 새 인스턴스를 초기화합니다.
MemoryStream(Byte[], Int32, Int32, Boolean) 지정된 대로 설정된 MemoryStream 속성을 사용하여 지정된 바이트 배열의 영역을 기반으로 하는 CanWrite 클래스의 크기 조정이 불가능한 인스턴스를 초기화합니다.
MemoryStream(Byte[], Int32, Int32, Boolean, Boolean) 지정된 대로 설정된 MemoryStream 속성과 지정된 대로 설정된 CanWrite 호출 기능을 사용하여 지정된 바이트 배열의 영역을 기반으로 하는 GetBuffer() 클래스의 인스턴스를 초기화합니다.
MemoryStream(Int32) 지정된 대로 초기화된 확장 가능한 용량을 사용하여 MemoryStream 클래스의 새 인스턴스를 초기화합니다.

 

 

11.2 FileStream 속성

 

속성 내용
CanRead 현재 스트림이 읽기를 지원하는지를 나타내는 값을 가져옵니다.
CanSeek 현재 스트림이 검색을 지원하는지를 나타내는 값을 가져옵니다.
CanTimeout 현재 스트림이 시간 초과될 있는지를 결정하는 값을 가져옵니다.
CanWrite 현재 스트림이 쓰기를 지원하는지를 나타내는 값을 가져옵니다.
Capacity 스트림에 할당된 바이트 수를 가져오거나 설정합니다.
Length 스트림의 길이(바이트) 가져옵니다.
Position 스트림 내의 현재 위치를 가져오거나 설정합니다.
ReadTimeout 스트림 읽기 시도가 만료되기 전까지 기다릴 시간을 결정하는 (밀리초) 가져오거나 설정합니다.
WriteTimeout 스트림 쓰기 시도가 만료되기 전까지 기다릴 시간을 결정하는 (밀리초) 가져오거나 설정합니다.

 

 

11.3 FileStream 메서드

 

메서드 내용
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) 비동기 읽기 작업을 시작합니다대신 ReadAsync(Byte[], Int32, Int32, CancellationToken)를 사용하세요.
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) 비동기 쓰기 작업을 시작합니다대신 WriteAsync(Byte[], Int32, Int32, CancellationToken)를 사용하세요.
Close() 현재 스트림을 닫고 현재 스트림과 관련된 소켓과 파일 핸들 등의 리소스를 모두 해제합니다이 메서드를 호출하는 대신 스트림이 올바르게 삭제되었는지 확인합니다.
CopyTo(Stream) 현재 스트림에서 바이트를 읽어서 다른 스트림에 해당 바이트를 씁니다.
CopyTo(Stream, Int32) 현재의 메모리 스트림에서 바이트를 읽고, 지정된 버퍼 크기를 활용하여 다른 스트림에 씁니다.
CopyToAsync(Stream) 현재 스트림에서 모든 바이트를 비동기적으로 읽어 다른 스트림에 씁니다.
CopyToAsync(Stream, CancellationToken) 현재 스트림에서 바이트를 비동기적으로 읽어 지정된 취소 토큰을 사용하여 다른 스트림에 씁니다.
CopyToAsync(Stream, Int32) 현재 스트림에서 바이트를 비동기적으로 읽어 지정된 버퍼 크기로 다른 스트림에 씁니다.
CopyToAsync(Stream, Int32, CancellationToken) 현재 스트림에서 모든 바이트를 비동기적으로 읽어 지정된 버퍼 크기 및 취소 토큰을 사용하여 다른 스트림에 씁니다.
CreateObjRef(Type) 원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.
Dispose() Stream에서 사용하는 모든 리소스를 해제합니다.
Dispose(Boolean) MemoryStream 클래스에 사용되는 관리되지 않는 리소스를 해제하고, 필요에 따라 관리되는 리소스를 해제합니다.
DisposeAsync() Stream에서 사용하는 관리되지 않는 리소스를 비동기적으로 해제합니다.
EndRead(IAsyncResult) 보류 중인 비동기 읽기가 완료되기를 기다립니다대신 ReadAsync(Byte[], Int32, Int32, CancellationToken)를 사용하세요.
EndWrite(IAsyncResult) 비동기 쓰기 작업을 끝냅니다대신 WriteAsync(Byte[], Int32, Int32, CancellationToken)를 사용하세요.
Equals(Object) 지정된 개체가 현재 개체와 같은지 확인합니다.
Flush() Flush() 메서드를 재정의하여 아무런 작업도 수행되지 않도록 합니다.
FlushAsync() 이 스트림에 대한 모든 버퍼를 비동기적으로 지우고 버퍼링된 모든 데이터가 내부 디바이스에 비동기적으로 쓰여지도록 합니다.
FlushAsync(CancellationToken) 이 스트림에 대한 모든 버퍼를 비동기적으로 지우고 취소 요청을 모니터링합니다.
GetBuffer() 이 스트림을 만드는 데 사용된 부호 없는 바이트의 배열을 반환합니다.
GetHashCode() 기본 해시 함수로 작동합니다.
GetType() 현재 인스턴스의 Type을 가져옵니다.
MemberwiseClone() 현재 Object의 단순 복사본을 만듭니다.
MemberwiseClone(Boolean) 현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.
Read(Byte[], Int32, Int32) 현재 스트림에서 바이트 블록을 읽어서 버퍼에 씁니다.
Read(Span<Byte>) 현재의 메모리 스트림에서 바이트 시퀀스를 읽고, 읽은 바이트 수만큼 메모리 스트림 내의 위치를 앞으로 이동합니다.
ReadAsync(Byte[], Int32, Int32) 현재 스트림에서 바이트 시퀀스를 읽고 읽은 바이트 수만큼 스트림에서 위치를 비동기적으로 앞으로 이동합니다.
ReadAsync(Byte[], Int32, Int32, CancellationToken) 현재 스트림에서 바이트의 시퀀스를 비동기적으로 읽고 읽은 바이트 수만큼 스트림 내에서 앞으로 이동하며 취소 요청을 모니터링합니다.
ReadAsync(Memory<Byte>, CancellationToken) 현재의 메모리 스트림에서 바이트 시퀀스를 비동기적으로 읽어 destination에 쓰고, 이 메모리 스트림 내에서 기록한 바이트 수만큼 현재 위치를 앞으로 이동한 후, 취소 요청을 모니터링합니다.
ReadByte() 현재 스트림에서 바이트를 읽습니다.
Seek(Int64, SeekOrigin) 현재 스트림 내의 위치를 지정된 값으로 설정합니다.
SetLength(Int64) 현재 스트림의 길이를 지정된 값으로 설정합니다.
ToArray() Position 속성에 관계없이 바이트 배열에 스트림 내용을 씁니다.
ToString() 현재 개체를 나타내는 문자열을 반환합니다.
TryGetBuffer(ArraySegment<Byte>) 이 스트림을 만드는 데 사용된 부호 없는 바이트의 배열을 반환합니다반환 값은 변환의 성공 여부를 나타냅니다.
Write(Byte[], Int32, Int32) 버퍼에서 읽은 데이터를 사용하여 현재 스트림에 바이트 블록을 씁니다.
Write(ReadOnlySpan<Byte>) source에 포함된 바이트의 시퀀스를 현재의 메모리 스트림에 쓰고, 이 메모리 스트림 내에서 기록한 바이트 수만큼 현재 위치를 앞으로 이동합니다.
WriteAsync(Byte[], Int32, Int32) 현재 스트림에 바이트 시퀀스를 비동기적으로 쓰고 쓴 바이트 수만큼 이 스트림에서 현재 위치를 앞으로 이동합니다.
WriteAsync(Byte[], Int32, Int32, CancellationToken) 바이트의 시퀀스를 현재 스트림에 비동기적으로 쓰고 쓰여진 바이트 수만큼 이 스트림 내의 현재 위치를 앞으로 이동한 후 취소 요청을 모니터링합니다.
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) source에 포함된 바이트의 시퀀스를 현재의 메모리 스트림에 비동기적으로 쓰고, 이 메모리 스트림 내에서 기록한 바이트 수만큼 현재 위치를 앞으로 이동한 후, 취소 요청을 모니터링합니다.
WriteByte(Byte) 현재 위치에서 현재 스트림에 바이트를 씁니다.
WriteTo(Stream) 다른 스트림에 이 메모리 스트림의 전체 내용을 씁니다.

 

 

11.4 예제

 

using UnityEngine;
using System;
using System.Text;
using System.IO;

public class MemoryStreamDemo : MonoBehaviour
{
    private int count;
    private byte[] byteArray;
    private char[] charArray;
    private static UnicodeEncoding uniEncoding = new UnicodeEncoding();

    private byte[] firstString = uniEncoding.GetBytes("Invalid file path characters are: ");
    private byte[] secondString = uniEncoding.GetBytes(Path.GetInvalidPathChars());


    void Start()
    {
        using (MemoryStream memStream = new MemoryStream(100))
        {
            memStream.Write(firstString, 0, firstString.Length);

            count = 0;
            while (count < secondString.Length)
            {
                memStream.WriteByte(secondString[count++]);
            }

           Debug.LogFormat(
                "Capacity = {0}, Length = {1}, Position = {2}\n",
                memStream.Capacity.ToString(),
                memStream.Length.ToString(),
                memStream.Position.ToString());

            memStream.Seek(0, SeekOrigin.Begin);

            byteArray = new byte[memStream.Length];
            count = memStream.Read(byteArray, 0, 20);

            while (count < memStream.Length)
            {
                byteArray[count++] =
                    Convert.ToByte(memStream.ReadByte());
            }

            charArray = new char[uniEncoding.GetCharCount(byteArray, 0, count)];
            uniEncoding.GetDecoder().GetChars(byteArray, 0, count, charArray, 0);

            string newString = new string(charArray);
            Debug.Log(newString);
        }
    }
}

 

728x90
반응형