• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vs2010 VC++ Open 記述方法)

VS2010 VC++でバイナリデータをOpenできないエラーの解決方法

このQ&Aのポイント
  • VS2010のVC++でバイナリデータをOpenする際、CFile::Openの引数リストが一致しないというエラーが発生します。このエラーの解決方法について解説します。
  • VC++でバイナリデータをOpenするためには、CFile::Openの第二引数にCFile::modeReadとCFile::typeBinaryを指定する必要があります。しかし、引数の指定方法が間違っているためにエラーが発生しています。
  • 正しい引数の指定方法は、CFile::Openの第二引数にCFile::modeRead | CFile::typeBinaryを指定することです。このように指定することで、バイナリモードでファイルを読み込むことができます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

CFile fr; CFileException e; wchar_t* pFileName = L"Kaltr.bat"; if(!fr.Open( pFileName, CFile::modeRead | CFile::typeBinary, &e)){ } 上記記述で、コンパイルできました。 frのピリオドで問題が出るなら、CFileがクラスとして認識されていないんじゃないでしょうか。 一度、MFCアプリケーションで新しいプロジェクトを作成して、コンパイルが通るか試してみては? なお、CFile::typeBinaryは「派生クラスで使用する」となっていて、CFileでは意味がないはずです。

r32yokoyok
質問者

お礼

回答ありがとうございます。 CFileException e;指定が変換出来ないというエラーが出ていました。 if(!fr.Open( pFileName, CFile::modeRead | CFile::typeBinary, Null)){のように修正したらコンパイルが出来たので、先に進んでみようと思います。 大変助かりました。ありがとうございます。

その他の回答 (4)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.5

No4.のつづきです。。。 他の方も書かれていますが、 ファイルパスの指定文字列を、ワイド文字に する必要があるのではないですか? VC2003以降では、デフォルトでUNICODEが定義され、 LPCSTRなどのマクロはワイド文字用となります。 たとえば。 LPCTSTR = lpFileName = TEXT("Kaltr.bat"); fr.Open( lpFileName, CFile::modeRead, &e);

r32yokoyok
質問者

お礼

回答ありがとうございます。 参考にさせて頂きます。 大変たすかりました。ありがとうございます。

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

CFileとは何者ですか?独自に作ったクラスでしょうか?それともMFC? MFCであれば、typeBinaryなんて値は存差しません。 仕様を見ないまま、勝手につけてはいけません。 #確かにありそうな名前ですが。。。 MFC前提で話を進めるならば、 CFileはもともと、バイナリ用のファイルIOクラスです。 テキストを扱う為には、CStdioFileクラスを使用します。 故に、ファイルタイプを指定する必要はありません。 MFCでないのなら、CFileが何者であるかを補足してください。

r32yokoyok
質問者

お礼

回答ありがとうございます。 自分で作ったクラスではありません。vb6を元に作成しているので、分からなかったのですが、TypeBinaryはおっしゃるとおりありませんでしたW ちなみに現在作成しているのは、win32でdll化したプロジェクトです。 VBからVC++(dll)を呼んで処理をする所です。 大変助かりました。ありがとうございます。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

2010から仕様が変わったみたいですね virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL ); virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CAtlTransactionManager* pTM, CFileException* pError = NULL ); これが原因では

参考URL:
http://msdn.microsoft.com/ja-jp/library/hwbccf8z%28v=VS.100%29.aspx
r32yokoyok
質問者

お礼

回答ありがとうございます。 仕様が変更されていて、解りづらくなっていたようなぁ・・・とても助かりました。 参考にさせて頂きます。

回答No.1

プロジェクトの設定でUNICODEを使用するようになっているなら、ファイル名はchar*ではなくwchar_t*になります。その点で引数リストと一致しないのではないでしょうか。 wchar_t* pFileName = L"Kaltr.bat"; でどうでしょうか。 この差を吸収するため、VC++ではLPCTSTR、LPTSTR、TEXTマクロ、_Tマクロなどが用意されていますので、一度調べてみてはいかがでしょうか。

r32yokoyok
質問者

お礼

回答ありがとうございます。 さっそく試してみましたが、同じようなエラーでした。 if(!fr.Open( pFileName, CFile::modeRead | CFile::typeBinary, &e)){ エラーの箇所が"!fr.Open"のピリオドの部分と"&e)"の括弧部分がエラーとなっているようです。 調べてみます。ありがとうございました。

関連するQ&A