いつもお世話になっております。
Visual Studio 2013 C++ MFC でコーディングをしていますが、
ファイルのオープンができず、悩んでおります。
下記のようにコーディングしているのですが、
file.Openの「.」の部分が赤波線になり、下記のようなエラーになってしまいます。何か解決方法がございましたら、是非とも教えて頂けますでしょうか。よろしくお願い致します。
std::string strFile;
strFile = g_strLogPath + g_strLogName;
CFile file;
if (file.Open((strFile), CFile::modeWrite || CFile::typeText)){
・
・
・
オーバーロードされた関数"CFile::Open"のインスタンスが引数リストと一致しません
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
自己解決
皆様、色々と何度も丁寧な回答をして頂きまして、本当に感謝しております。
皆様の回答を参考にして、以下のようにダメ元で記述をしてみたところ、
エラーが解消されました。
if (file.Open(LPCTSTR(strFile.c_str()), CFile::modeWrite | CFile::typeText)){
なぜ、LPCTSTRを入れただけでエラーが解消されたのかは、自分はよくわからないのですが、納期が迫っておりますので、次に進みたいと思います。
本当に、ありがとうございました。
感激しております。
投稿2017/05/25 09:18
総合スコア38
0
外していたらすいません。
コンパイルはUnicode形式ですか?それともマルチバイト形式?
もしUnicode形式でコンパイルしているのならstd:wstring
を使わないといけないと思います。openに渡す時は.c_str()
が必要なはずです。
もしくは、マルチバイト形式に変えるかですが、MFCのマルチバイト形式のライブラリはVS2013では標準ではついてなくて、別途Microsoftからダウンロード(無料)してインストールが必要だったような気がします。
投稿2017/05/25 08:20
総合スコア3579
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/25 09:01 編集
0
strFile.c_str()で定数文字列が取り出せないかな?
投稿2017/05/25 07:23
総合スコア487
0
MFC
1 CString strFile; 2 CFile file; 3 if (file.Open((strFile), CFile::modeWrite | CFile::typeText)){ 4 return; 5 } 6
最初に貼られたコードについてはお二方が答えて言うことはないので、新しく書かれている方について
同様にVS2013C++の環境でコピペしてみたけれども、特に警告の赤印は出ないですね。
ビルドしても同様のエラーでしょうか
元のコードの場合でも
C++,MFC
1 std::string strFile; 2 strFile = g_strLogPath + g_strLogName; 3 CFile file; 4 if (file.Open(strFile.c_str(), CFile::modeWrite | CFile::typeText)){ 5
とする方法あります
投稿2017/05/25 07:20
総合スコア546
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/25 07:39
2017/05/25 08:57
0
CFile::Openより、引数の型が合ってません。
strFile.c_str()
でエラー解消するかもしれませんが、プロジェクトの文字セットによります。
プロジェクトの文字セットについては_T("")マクロについてを参照ください。
以下、本質問と直接関係ありませんが、アドバイスです。
MFC
であれば特別な理由のないかぎりstd::string
ではなくCString
を使うことをお勧めします。- 2番目の引数
CFile::modeWrite || CFile::typeText
は意図した動作をしませんCFile::modeWrite | CFile::typeText
に修正すべきます。
投稿2017/05/25 06:39
総合スコア38266
0
MSDNにありますように、CFile::Open
の第1引数はLPCTSTRを取ります。
std::string
は自動でLPCTSTR
に変換できませんので、MFCのCString
を使いましょう。
投稿2017/05/25 06:29
総合スコア145184
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/25 06:31
2017/05/25 06:55
2017/05/25 07:09
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/25 09:31
2017/05/25 09:37
2017/05/25 11:53
2017/05/26 02:06
2017/05/26 04:24
2017/05/26 05:06
2017/05/26 05:13
2017/05/26 05:55