Flush()와 Close()
- Flush() : 이 스트림의 버퍼를 지우고 버퍼링된 모든 데이터가 파일에 쓰여지도록 합니다.
- 파일에 데이터가 기록될 예정이지만, 아직 기록되지 않은 데이터를 저장합니다.
- Close() : Flush()의 기능 + '파일 닫기' 기능을 추가합니다.
사용예제
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
class Solution
{
static void Main(string[] args)
{
String fileName= "test.txt";
var writer = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), fileName));
writer.WriteLine("hello world.");
//writer.Flush(); //System.IO.IOException 오류 발생
writer.Close();
var reader = new StreamReader(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), fileName));
Console.WriteLine(reader.ReadToEnd());
}
}
실행결과
- 예제에서 writer.Flush()를 호출하는 경우 System.IO.IOException 오류 발생합니다.
- 파일을 Open 이후 Close하지 않고, 다시 파일을 Open하기 때문에 오류가 발생합니다.
- Close()호출 시 오류 해결됩니다.
Using문과 try-finally구문
- Using문이 끝날 때 객체(writer, reader)가 가지는 Dispose 메서드를 자동으로 호출하여 파일을 Close합니다.
- 종료 처리를 호출합니다.
- Using블록 내에서 어떤 예외적인 상황이 발생해도 Dispose가 호출되는 것을 보장합니다
- Using문을 사용하는 것은 try블록 내에 객체를 두고 finally블록에서 Dispose를 호출 하는 것과 동일합니다.
Using문 사용예제
String fileName= "Using.txt";
using (var writer = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), fileName)))
{
writer.WriteLine("hello world.");
}
using (var reader = new StreamReader(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), fileName)))
{
Console.WriteLine(reader.ReadToEnd());
}
실행결과
try-finally구문 사용예제
string fileName = "tryfinally.txt";
var filepath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), fileName);
var writer = new StreamWriter(filepath);
//System.IO.IOException 발생
//var reader = new StreamReader(filepath);
try
{
writer.WriteLine("hello world 1.");
writer.WriteLine("hello world 2.");
}
finally
{
writer.Dispose();
}
var reader = new StreamReader(filepath);
Console.WriteLine($"{reader.ReadToEnd()}");
실행결과
'프로그래밍 > (도서)C#코딩의기술-실전' 카테고리의 다른 글
[C#] 코딩의기술(실전편) - 2.2 변화하는 조건 (0) | 2022.03.31 |
---|---|
[C#] 코딩의기술(실전편) - 1.7 예외처리 (0) | 2022.03.31 |
[C#] 코딩의기술(실전편) - 1.5 비동기 처리 (0) | 2022.03.31 |
[C#] 코딩의기술(실전편) - 1.4 병렬처리 (0) | 2022.03.31 |
[C#] 코딩의기술(실전편) - 1.3 순차처리 (0) | 2022.03.31 |