はじめまして りょくちゃと申します。
テキストファイルを開いて、テキストを1行毎に読むソースの一部なんですが、
CStdioFileでファイルオープンするとエラーになり、CFileを使うとすんなりファイルが
開けます。
エラーはファイルオープンダイアログ後に「XXX.txtへのアクセス中にディスクがいっぱ
いになりました。」というメッセージが出ます。
1行ごとに判定を行って読み込みを行いたいので、CStdioFileのReadStringを使用したい
ところなんです。
何故CStdioFileでエラーが起こるか解りません。
エラーの原因と対処法のヒントを頂けたらと思い投稿しました。
どうぞよろしくお願いします。
--------以下のソースで(*)のクラスを「CFile」にするとOK--------
(*)CStdioFile dxFile ;
CString dxName ;
CFileDialog dlg( TRUE,
.txt,
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
text(*.txt)|*.txt||,
this ) ;
if( dlg.DoModal() == IDOK )
dxName = dlg.GetPathName() ;
dxFile.Open( dxName, CFile::modeRead | CFile::typeText ) ;
fcloseall();
再び投稿主のりょくちゃです。
開発環境を書き忘れました。
WinXP、VisualC+6.0、MFC
です。 以上です。
>CStdioFileでファイルオープンするとエラーになり、CFileを使うとすんなりファイル
が
>開けます。
開くファイルのサイズはどの程度でしょうか?
あまりサイズが大きいとCStdioFileのOpen処理で_fdopenを使っているので
NGの場合があります。
_open_osfhandle使っているが原因なのかな。
_fdopenまで行くと開けるかも。。。
一度デバッグで追っかけてみてはどうでしょうか?
Blueさま、早速のチェックありがとうございます。
試しに小さいファイル(2byte文字を記述した2行のみのファイル(1KB))を
作成してテストしたのですが、これでもエラーが出てしまいました。
_fdopen周辺を調べてみます。
>エラーはファイルオープンダイアログ後に「XXX.txtへのアクセス中にディスクがいっ
ぱ
>いになりました。」というメッセージが出ます。
のエラーはどのように取得していますか?
try~catchで捕まえたCFileExceptionに対してでしょうか?
それとそのファイルを別のところで開いたりはしていませんか?
CStdioFileのコンストラクタで試してみてはどうでしょうか?
CStdioFile(
LPCTSTR lpszFileName,
UINT nOpenFlags
);
>CStdioFileのコンストラクタで試してみてはどうでしょうか?
Openと同じですよ。
以下MFCソース
>CStdioFile::CStdioFile(LPCTSTR lpszFileName, UINT nOpenFlags)
>{
> ASSERT(lpszFileName != NULL);
> ASSERT(AfxIsValidString(lpszFileName));
>
> CFileException e;
> if (!Open(lpszFileName, nOpenFlags, &e))
> AfxThrowFileException(e.m_cause, e.m_lOsError,
>e.m_strFileName);
>}
結局try~catchで捕まえてみないとよくわからないと。
さぜ、「fcloseall()」を使うのでしょうか?
---------------------------------------------------
CStdioFile dxFile ;
CString dxName ;
CFileDialog dlg( TRUE,
.txt,
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
text(*.txt)|*.txt||,
this ) ;
if( dlg.DoModal() == IDOK )
dxName = dlg.GetPathName() ;
dxFile.Open( dxName, CFile::modeRead | CFile::typeText ) ;
dxFile.Close();
---------------------------------------------------
なら上手くいくと思いますが
CStdioFile::Close()
を使わない理由は何???