CString text;
text = "hoge\n";
text += "hoge"

CFile fp;
fp.Open( "tmp.txt", CFile::modeCreate | CFile::modeWrite );
fp.Write( text, text.GetLength() );
fp.Close();

をすると、「h o g e」 などと書かれてしまいます。

CFile fp;
char* p;
long len;
fp.Open( "tmp.txt", CFile::modeCreate | CFile::modeWrite );
len = text.GetLength();
p = text.GetBuffer( len );
fp.Write( p, len );
fp.Close();
text.ReleaseBuffer()

等としても同様に「h o g e」になってしまうのですが、どうすれば良いのでしょうか?

しかも最後まで書かれません。これはGetLength()で帰ってくる値が文字数であってバイト数では無いから、なのでしょうけども・・・。
どうすれば・・・。