다음은 J-Notebook 프로그램의 파일 저장 소스 일부분이다.
if(dlg.DoModal() == IDOK)
{
CFile file;
CFileException e;
if(!file.Open(dlg.GetFileName(), CFile::modeWrite | CFile::modeCreate, &e))
{
e.ReportError();
return;
}
// 파일을 쓴다. 음... file.Write가 \n 이 자동으로 붙고, \r\n하면 한줄씩 내려준다.
// 유니코드 시작
WORD a;
a = 0xFEFF;
<- 16진수 변환 프로그램을 보니, 제대로 읽히는 파일은 FFFE로 시작한다.
하지만 FEFF로 넣었다.. 왜냐? 윈도우는 리틀 앤디안이기 떄문이라;;;
file.Write((void*)&a, sizeof(a));
// 맨 처음부분에 넣어준다. 왜인지 모르겠지만 아무래도 유니코드 식별인자 인거 같다;;
// 유니코드에서 한줄내림은 코드는 0x0a인듯 하다..
a = 0x0A;
JWord note;
CString strWord;
int i=0;
for(; i < pDoc->m_szNoteWord.size()-1; i++)
{
note = pDoc->m_szNoteWord[i];
strWord.Format(L"%s;%s;%s;%d\r",note.word, note.yomigana, note.mean, note.count);
// 글자를 쓰고,
file.Write(strWord, strWord.GetLength()* sizeof(wchar_t));
// 이 글자의 유니코드식별자? 를 추가해준다.. 파일흐름상 개행라인인거 같다.
file.Write((void*)&a, sizeof(a));
}
// 마지막은 개행할 필요가 없으므로 따로 써준다.
note = pDoc->m_szNoteWord[i];
strWord.Format(L"%s;%s;%s;%d",note.word, note.yomigana, note.mean, note.count);
file.Write(strWord, strWord.GetLength()* sizeof(wchar_t));
}
이짓을 해주면. CFile::typeText | CFile::modeRead 로 문제없이 읽어온다.
하지만... 유니코드... 이거 난해해서.. 괜한 지뢰밭 들어간건 아닌지 걱정된다.
'프로그래밍 > API' 카테고리의 다른 글
mbstowcs_s, _mbstowcs_s_l (0) | 2010.07.27 |
---|---|
ReadFile() 함수 (0) | 2010.07.27 |
멀티바이트->유니코드 , 유니코드->멀티바이트 간단변환 (0) | 2010.05.25 |
하얀새님 블로그 (0) | 2010.05.20 |
1 (0) | 2010.05.20 |