CStdioFileでエラーが出る(CFileではOK)ファイルオープン時のエラー – プログラミング – Home

CStdioFileでエラーが出る(C...
 
通知
すべてクリア

CStdioFileでエラーが出る(CFileではOK)ファイルオープン時のエラー


りょくちゃ
 りょくちゃ
(@りょくちゃ)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

はじめまして りょくちゃと申します。

テキストファイルを開いて、テキストを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();


引用解決済
トピックタグ
りょくちゃ
 りょくちゃ
(@りょくちゃ)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

再び投稿主のりょくちゃです。
開発環境を書き忘れました。
 WinXP、VisualC+6.0、MFC

です。 以上です。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>CStdioFileでファイルオープンするとエラーになり、CFileを使うとすんなりファイル

>開けます。
開くファイルのサイズはどの程度でしょうか?
あまりサイズが大きいとCStdioFileのOpen処理で_fdopenを使っているので
NGの場合があります。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

_open_osfhandle使っているが原因なのかな。
_fdopenまで行くと開けるかも。。。

一度デバッグで追っかけてみてはどうでしょうか?


返信引用
りょくちゃ
 りょくちゃ
(@りょくちゃ)
ゲスト
結合: 20年前
投稿: 3
Topic starter  

Blueさま、早速のチェックありがとうございます。

試しに小さいファイル(2byte文字を記述した2行のみのファイル(1KB))を
作成してテストしたのですが、これでもエラーが出てしまいました。

_fdopen周辺を調べてみます。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>エラーはファイルオープンダイアログ後に「XXX.txtへのアクセス中にディスクがいっ

>いになりました。」というメッセージが出ます。
のエラーはどのように取得していますか?
try~catchで捕まえたCFileExceptionに対してでしょうか?

それとそのファイルを別のところで開いたりはしていませんか?


返信引用
Wakyu
 Wakyu
(@Wakyu)
ゲスト
結合: 20年前
投稿: 3
 

CStdioFileのコンストラクタで試してみてはどうでしょうか?
CStdioFile(
LPCTSTR lpszFileName,
UINT nOpenFlags
);


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>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で捕まえてみないとよくわからないと。


返信引用
うちだ
 うちだ
(@うちだ)
ゲスト
結合: 20年前
投稿: 14
 

さぜ、「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()
を使わない理由は何???


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました