CFileをCStdioFileに変換してファイルの読み書きを行いたいと思い、
以下のソースで実行してみました。
動かした際、読込みは出来るのですが、書込みが出来ません。
原因が分かる方いらっしゃいましたらご教授をお願いします。
環境:WinXP、VisualC+6.0、MFC
#include <Fcntl.h>
#if !defined (_MSC_VER) || (_MSC_VER < 1400)
typedef long intptr_t;
#endif //_MSC_VER
BOOL FileConvertTest()
{
const unsigned int OPEN_W = CFile::modeCreate | CFile::modeWrite;
const unsigned int OPEN_A = CFile::modeCreate | CFile::modeWrite |
CFile::modeNoTruncate;
const unsigned int OPEN_R = CFile::modeRead;
CString path = 00001.txt, str1, str2 = 書込み;
CFile file1;
CStdioFile* std1;
CFileException e;
unsigned int uFlag = OPEN_R; //読込み
// unsigned int uFlag = OPEN_W; //書込み
if(! file1.Open(path, uFlag, &e)) return(FALSE);
int nMode = 0;
TCHAR szMode[5];
memset(szMode, 0x00, sizeof(szMode));
if (uFlag == OPEN_W){szMode[0] = 'w'; nMode = _O_WRONLY | _O_CREAT |
_O_TRUNC ;}
else if(uFlag == OPEN_A){szMode[0] = 'a'; nMode = _O_WRONLY | _O_CREAT |
_O_APPEND;}
else if(uFlag == OPEN_R){szMode[0] = 'r'; nMode = _O_RDONLY;}
else {return(FALSE);}
szMode[1] = 'b';
int nCrtFile = _open_osfhandle((intptr_t)file1.m_hFile, nMode);
if(nCrtFile == -1) return(FALSE); //エラー時
std1 = new CStdioFile(_tfdopen( nCrtFile, szMode));
if(std1->m_pStream == NULL) return(FALSE); //エラー時
try
{
std1->ReadString(str1); //読込み
//std1->WriteString(str2); //書込み
}
catch(CFileException* pE){
return(FALSE);
}
file1.Close();
delete std1;
return(TRUE);
}
> std1->WriteString(str2); //書込み
これのあとに
std1->Flush();
をいれてみて
解決しました。
有難うございました。