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);
}
}
}
'프로그램 > 유니티 C# 강좌' 카테고리의 다른 글
[유니티 C# 강좌] 23. 멀티스레드(Multi-thread) (0) | 2021.05.05 |
---|---|
[유니티 C# 강좌] 22. 링크(LINQ, Language-Integrated Query) (1) | 2020.02.11 |
[유니티 C# 강좌] 21. 제네릭 컬렉션(General Collection) (1) | 2020.02.09 |
[유니티 C# 강좌] 20. 병렬 프로그래밍 (Parallel Programming) (0) | 2020.02.09 |
[유니티 C# 강좌] 19. 비동기 프로그래밍(Asynchronous Programming) (0) | 2020.02.06 |