[C#] Text 파일 쓰기

C#에서 텍스트에 대한 인코딩을 지정하면서 텍스트 파일을 생성하고 텍스트를 기록하는 코드에 대해 정리해 봅니다.

using (System.IO.StreamWriter file = 
    new System.IO.StreamWriter(
        GeodataFileName, false, Encoding.GetEncoding("EUC-KR")))
{
    file.WriteLine("안녕하세요.");
}

위의 코드는 인코딩을 EUC-KR로 하기 위해 StreamWriter의 생성자에의 세번째 인자에 인코딩 정보를 전달했으며 두번째 인자를 false로 하여 텍스트 파일이 새롭게 생성되도록 하고 있습니다. 만약 두번째 인자를 true로 지정하면 기존의 파일에 텍스트 값을 덧붙여(Append) 기록하게 됩니다.

[C++11] decltype

decltype은 주어진 표현식에 대한 결과의 타입을 컴파일러가 추론하라는 키워드(keyword)입니다. 예를 들어서 다음의 코드를 보면..

#include "stdafx.h"
#include 

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    cout << typeid(decltype(10)).name() << endl;

    return 0;
}

위 코드에서 8번을 보면 decltype(10)이라는 코드가 있는데, 표현식 10에 해당하는 type을 컴파일러가 추론을 하여 해당 타입의 이름을 출력하게 되는 것으로 결과는 'int'를 출력합니다.

또 다른 예를 살펴보면..

#include "stdafx.h"
#include 

using namespace std;

auto func(int a, int b) -> decltype(a + b)
{
    return a + b;
}

int _tmain(int argc, _TCHAR* argv[])
{
    cout << func(100, 200) << endl;

    return 0;
}

6번 코드를 보면 함수의 결과값에 auto를 사용할 수 없음에도 func라는 함수의 반환값이 auto를 사용하고 있습니다. 이것이 가능한 이유는 바로 함수의 정의 뒤에 오는 -> decltype(a+b)에 의해서 입니다. 즉, a+b에 대한 결과값의 타입을 추론하여 ->에 의해 함수의 반환값 추론에 대한 힌트를 제공하는 것입니다. a와 b는 int 타입이고 이 int 값들의 합 역시 int이므로 쉽게 함수의 결과값의 타입은 int라는 것을 추론할 수 있는 것입니다.