- ベストアンサー
ファイル読み込みについて
最近プログラミングを始めたばかりの初心者です。 ファイルを開く時に関する質問です。 環境 Windows XP SP2 VC++6.0, MFC,SDI 現在、ファイルを読み込むための関数を作っていますが、始めにファイルダイアログを呼び出したあと、ファイルの種類(拡張子)によって、読み込むための関数を分ける方法を探しています。 もし分かる方がいらっしゃいましたら教えてください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
以下に変更してみてください。 void (質問者さんのクラス名)::Serialize(CArchive& ar) { if (ar.IsStoring()) {(略) } else { char* lpBuf; int i; lpBuf=(char*)malloc(MAX_PATH - 1); lpBuf=ar.GetFile()->GetFileName().GetBuffer(MAX_PATH - 1); for (i=lstrlen(lpBuf)-1;*(lpBuf+i) - '.';i--);i++; //ここから判定 //.flv を対照の場合 if (!lstrcmpi(lpBuf + i,"flv")) 関数1; //.flv と .mpg を対照の場合※ if (!lstrcmpi(lpBuf + i,"flv") || !lstrcmpi(lpBuf + i,"mpg")) 関数2; //以降、複数は※のように、'||' で繋げる ・ ・ free(lpBuf); } }
その他の回答 (2)
すみません。 lpBuf=(char*)malloc(MAX_PATH - 1); free(lpBuf); と言う2行は消してください。 不要です。 ちなみに No.1 でエラーがでたのは配列アドレスを書き換えようと したからです。 (私の凡ミス・・・)
こんな感じではどうですか? void (質問者さんのクラス名)::Serialize(CArchive& ar) { if (ar.IsStoring()) {(略) } else { char lpBuf[MAX_PATH - 1]; int i; lpBuf=ar.GetFile()->GetFileName().GetBuffer(MAX_PATH - 1); for (i=lstrlen(lpBuf)-1;*(lpBuf+i) - '.';i--);i++; //ここから判定 //.flv を対照の場合 if (!lstrcmpi(lpBuf + i,"flv")) 関数1; //.flv と .mpg を対照の場合※ if (!lstrcmpi(lpBuf + i,"flv") || !lstrcmpi(lpBuf + i,"mpg")) 関数2; //以降、複数は※のように、'||' で繋げる ・ ・ } }
お礼
お返事ありがとうございます。 早速試みてみたいと思います。
補足
早速試してみたのですが 上記の記述を入れてビルドすると lpBuf=ar.GetFile()->GetFileName().GetBuffer(MAX_PATH - 1); の部分で char* から char[259]に変換することができませんというエラーが出てしまいました。 MSDNで調べてみるとキャストができないそうです。 何か対処法はありますでしょうか? よろしくお願いします。
お礼
何度もありがとうございます。 ビルドできました。 これから関数の中身を作っていきたいと思います。 ありがとうございました。
補足
うまくいきました。 ありがとうございました。