MFCでファイルを読込むプログラムを作成しているのですが、
例題を丸写しに近い状態で利用したため、変数の意味が分からず、困っております。
以下がそのプログラムなのですが・・・。
/***********************************************************************************************
void CProgramDoc::OnFileRead(CDC *pDC)
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
CFileDialog filedlg(TRUE//ファイル読み込みモード
, "txt"//デフォルトの拡張子
, NULL//デフォルトで指定するファイル名
, OFN_HIDEREADONLY//オプション指定のフラグ
, "グリッドファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*||");//ファイル名のフィルタ
CStdioFilestdfile;
ifstream ifs;
int Lineindex=0;
if( filedlg.DoModal() == IDOK)
{//ダイアログを表示し,OKボタンが押されたならば
m_sPath = filedlg.GetPathName();
if(stdfile.Open(m_sPath,CFile::modeRead))
{//ファイルを正常に開けた場合
while(stdfile.ReadString(buffer))
{
m_pos = NULL;
m_strList.AddTail(buffer);
Lineindex++;
}
m_pos = m_strList.GetHeadPosition();//先頭部分の要素の位置を返す
m_sKanji = m_strList.GetNext(m_pos);//posの位置を次へ移動させる。漢字取得
m_sRomaji = m_strList.GetNext(m_pos);//ローマ字取得
POSITION pos = GetFirstViewPosition();
stdfile.Close();
}
else
{
AfxMessageBox("ファイルを開くことができませんでした");
}
}
}
//***********************************************************************************************
このプログラムでファイル名を代入している変数は、m_sPath で良いのでしょうか。
そして、例えば、『A.txt』というファイルを読込んだ際、
if(m_sPath=="A.txt")
{
------
}
と言ったようにファイルの名前が『A.txt』ならばというようなif文を作成することができるのでしょうか?
問題が多岐にわたってしまい、申し訳ございません。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>このプログラムでファイル名を代入している変数は、m_sPath で良いのでしょうか。
半分正解で、半分不正解。
m_sPathには「ファイル名のみ」ではなく「ドライブ名、パス名、拡張子が付いたファイル名」が入っています。
>そして、例えば、『A.txt』というファイルを読込んだ際、
>if(m_sPath=="A.txt")
>{
>------
>}
>と言ったようにファイルの名前が『A.txt』ならばというようなif文を作成することができるのでしょうか?
単純にはできません。
それをやるには、m_sPathの内容に含まれている「ドライブ名、パス名、拡張子が付いたファイル名」から「拡張子が付いたファイル名」を取り出し、更に、英字をすべて大文字か小文字に書き換えた上で、目的のファイル名か判断しなければなりません。
例
1.「C:\MyFolder\TextFile\Mydata\a.Txt」から「a.Txt」を取り出す
2.「a.Txt」の英字を全部大文字に書き換え「A.TXT」にする
3.「A.TXT」と比較する
ファイル選択ダイアログで「A.txt」と入力して「A.txt」をオープンしようとしても、ファイル名の英字の大文字小文字は同一視されますから、実際に開かれるファイル名は「C:\MyFolder\TextFile\Mydata\a.Txt」とかになっている可能性があります。
なので、上記1~3のような「面倒な前処理」が必要です。
この回答への補足
ご解答ありがとうございます。
それでは、m_sPath==""C:\MyFolder\TextFile\Mydata\a.txt"
としたら、結果として読込めるということでしょうか?
No.2
- 回答日時:
こんばんは。
だいぶ混乱している様ですので。>>このプログラムでファイル名を代入している変数は、m_sPath で良いのでしょうか。
はい。
//ダイアログを表示し,OKボタンが押されたならば
m_sPath = filedlg.GetPathName();
↑この部分でファイルダイアログで選択したファイルへのパス文字列が代入されています。
>>と言ったようにファイルの名前が『A.txt』ならばというようなif文を作成することができるのでしょうか?
はい。
m_sPathの文字列から「ファイル名」の部分を取り出します。m_sPathと言うのは恐らくMFCのCStringの事だと思います。
CStringの操作方法を確認しておいた方が良い筈です。
「CStringT」
http://msdn.microsoft.com/ja-jp/library/abzc9989 …
又、処理が必要になる度長々と書く訳にも行かなくなるので、こう行った物は、関数にしまって使いまわす様にします。
//パスを剥がしてファイル名を出力する関数(デバッガで追って変数内などを確認してみて下さい)
static const CString StripPath(const CString& sPath)
{
//\を逆から見つけるposには\の見つかった位置が入る
const int pos= sPath.ReverseFind('\\');
//\が見当たらなければposの中は-1が入っている
if(pos == -1)
return CString();
//\の見つかった位置+1から、右を取り出す
CString sFile = sPath.Mid(pos + 1);
//大文字に変換する
sFile.MakeUpper();
return sFile;
}
//------------------------------------------------------------
//使用する
//ダイアログを表示し,OKボタンが押されたならば
m_sPath = filedlg.GetPathName();
//変更してはならない物には出来る限りconstキーワードを使用して固定します。
const CString sFile = ::StripPath(m_sPath);
if(sFile == "A.TXT")
{
//ファイル名が一致したのでココで何かする
}
//------------------------------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでワークシートを引数として...
-
拡張子を元に戻す
-
forfilesで検索したファイルを...
-
COPYコマンドで結合すると余計...
-
テキストファイルのタブをカン...
-
テキストファイルのファイル名...
-
.txtではなく.logの方が良いの...
-
Windows版のgzipについて
-
VBAでエクセルをtxtに変換する...
-
Perlで同じフォルダにある任意...
-
accessでSQL文を使ってcsvファ...
-
【エクセルVBA】エクセルからテ...
-
【Excel】 VBAを使って毎回名前...
-
ftpコマンドで複数のファイルを...
-
バッチファイルからVBAに引数を...
-
フォルダ名をファイル名の頭に...
-
DOSコマンドによるテキストファ...
-
多数のサブディレクトリ内のフ...
-
コマンドプロンプトで指定した...
-
バッチファイル 複数ファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
バッチファイル 複数ファイル...
-
テキストファイルで提出とは?
-
バッチファイルで文字列削除に...
-
Windowsのバッチファイルを利用...
-
テキストファイルのファイル名...
-
ファイルの最後に文字列挿入
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
テキストファイルのタブをカン...
-
MATLABで行列を配列に格納する方法
-
renameコマンドについて
-
【Excel】 VBAを使って毎回名前...
おすすめ情報