همیشه برای کارهای یونیکد از API های ویندوز استفاده می کردم به همین خاطر یادم رفته بود که fstream چقدر با یونیکد مشکل دارد.

متاسفانه حق با شماست، راحت نمی توانید فارسی را با iostream ذخیره کنید، چون basic_ofstream کارکترهای یونیکد را به MBCS تبدیل می کند، در نتیجه رشته ای ذخیره نمی شود.

یک راه حل برای این کار هست که کلاس NullCodecvt و تعاریف ذکر شده در لینک زیر را پیاده سازی کنید تا این مشکل بر طرف شود:
لینک مقاله (کلیک کنید)

در هر حال اگر بخواهید از API های ویندوز استفاده کنید (بدون iostream ) در پست دوم لینک تاپیک به همراه مثال قرار داده ام.