• ベストアンサー

Aドライブのエラーを回避したいのですが、

何度もすみません。 コンボボックスにドライブ一覧を取得しました。 そのコンボボックスを選択すると、 リストボックス1に、フォルダのパス名が表示されます。 リストボックス2に、ファイル名が表示されます。 CドライブやDドライブはいいのですが、 Aドライブのリムーバルドライブを選択すると エラーが表示されます。 エラーが表示される前に何とかしたいと思うのですが、 どうすればいいのかわかりません。 または、エラーを無視するでもいいです。 よろしくお願いします。 以下が、ドライブを選択した時のコンボボックスの関数です。 VisualStudio.NET WindowsXP MFC です。 void CFileViewView::OnCbnCloseupCombo1() { CString listtxt; comb.GetWindowText(listtxt); for(int i=list1.GetCount()-1;i>-1;i--) { list1.DeleteString(i); } for(int i=list2.GetCount()-1;i>-1;i--) { list2.DeleteString(i); } CFileFind find; listtxt=listtxt+"\\*";//? 「A:\*」などを指定する find.FindFile(listtxt,0); bool work=true; CString findtxt; while(work) { AfxMessageBox("OK");//表示される。 work=find.FindNextFile(); //? A:\などを指定する AfxMessageBox("OK2"); //表示されない。 if(find.IsDirectory() && !find.IsSystem() && !find.IsHidden()) { list1.AddString(find.GetFilePath()); } if(find.IsArchived() && !find.IsSystem() && !find.IsHidden()) { list2.AddString(find.GetFileName()); } } }

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

  • ベストアンサー
  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.1

挙げておられるMFCのソースの解釈はちょっと見では分かりませんが、 多分、メディアが入っていないせいではないですか。 FDD, MO, CD-ROM などの removable は、参照しようとして メディアが入っていないと「準備ができていません。」と出ると思います。 で、これをテスト方法ですが、_chdrive() があります。 使い方は、MSDN のサンプルを見てください。 また、vector にドライブ処理のソース rwfd013.lzh があります。 BPB を扱いますが、上記のエラーを検出しています。 他にも、検出方法はあるかもしれません。

thulala
質問者

お礼

ありがとうございました。 できました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>Aドライブのリムーバルドライブを選択すると >エラーが表示されます。 >エラーが表示される前に何とかしたいと思うのですが、 >どうすればいいのかわかりません。 >または、エラーを無視するでもいいです。 SetErrorMode()をSEM_FAILCRITICALERRORSを指定して呼び出す。 http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_seterrormode.htm

参考URL:
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_seterrormode.htm
thulala
質問者

お礼

ありがとうございました。 できました。

関連するQ&A

  • VC++ MFC エラーコード C2248 private メンバ (クラス 'CObject'で…

    VC++ MFC エラーコード C2248 現在、ダイアログAにあるコンボボックス(IDC_COMBO1)に単語を登録、削除する処理をしています。 ダイアログAには他に[登録]ボタン(IDC_BUTTON1)と[削除]ボタン(IDC_BUTTON2)があります。 IDC_COMBO1 を CComboBox m_combo; として // [登録]ボタン押下時 void CADlg::OnBnClickedButton1() { CString Txt, old; int ret = 0, count = 0, i; m_combo.GetWindowText(Txt); if ( strcmp(Txt, "") == 0 ) { AfxMessageBox( _T("語句を入力してください")); return; } // コンボボックスのリスト数取得 count = m_combo.GetCount(); for(i = 0; i < count; i++){ // IDC_COMBO1に登録済みの語句を順番に調べていく m_combo.GetLBText(i, old); // 既に登録済みの名前があった場合 if (oldFile == Txt){ ret = MessageBox( _T("上書きしますか?"), _T("語句登録"), MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 ); } } if ( ret == IDYES ) { return; } else if ( ret == IDNO ) { // 後ほど説明します CBDlg dlg; dlg.DoModal(); m_combo1.AddString(NewName); // extern CString NewName;←グローバル変数(Bダイアログから) return; } // 登録されていない語句の場合 m_combo.AddString(Txt); } 上記の登録の方、エラーなくコンパイルがとおり、コンボボックスにもちゃんと格納されています。 削除の方もエラーなくちゃんとコンボボックスから削除されます。 次に >else if ( ret == IDNO ) の部分なのですが [いいえ]ボタン(IDNO)が押された場合にはダイアログBが表示されます。 ダイアログBには語句を入力するエディットボックスIDC_EDIT1、[登録]ボタン(IDC_TOUROKU)、[取り消し]ボタン(IDC_TORIKESI)があります。 IDC_EDIT1 を CEdit m_ed1; として ここのBダイアログでもAダイアログ中のコンボボックスに格納されている語句が入力された場合はメッセージボックスを表示したいのです。 そこで void CBDlg::OnBnClickedTouroku() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 int rup, cnt, ret; CString oldf; CADlg cad; CComboBox cfdn = cad.m_combo; m_ed1.GetWindowText(NewName); // CString NewName;←グローバル変数 // Aダイアログ中のコンボボックスリスト数の取得 cnt = cfdn.GetCount(); for(rup = 0; rup < cnt; rup++){ // Aダイアログのコンボボックス中に登録されている語句取得 cfdn.GetLBText(rup, oldf); if (oldf == NewName){ ret = MessageBox( _T("本当に上書きしてもいいですか?"), _T("環境設定"), MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 ); } } if(ret == IDOK){ OnOK(); } else{ return; } } としました。 ここでコンパイルすると 1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1820) : error C2248: 'CObject::CObject' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(558) : 'CObject::CObject' の宣言を確認してください。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : 'CObject' の宣言を確認してください。 1> コンパイラでのこの診断により関数 'CCmdTarget::CCmdTarget(const CCmdTarget &)' が生成されました。 のようにエラーがでます。 調べてみると CComboBox cfdn = cad.m_combo; が原因のようです。 ググってみたりしたのですが解消法がわからず質問させていただきました。 よろしくお願いします。

  • コンボボックスにリストを表示させるには?

    VC++6.0でコンボボックスにリストを表示させようと思っているのですが プロパティのところのデータに追加しても表示されません ほかに設定するところはあるのでしょうか? もちろんコンボボックスは生きています。 他のhpをみて CComboBox* p = (CComboBox*)GetDlgItem(IDC_COMBO1); p->ResetContent(); p->AddString("項目2"); p->AddString("項目1"); p->AddString("項目4"); p->AddString("項目3"); も試してみたのですがうまくいきません。 よろしくお願いいたします。

  • リスト選択したものをワークシートに自動表示させるには?

    エクセル2007を使用しています。 コンボボックス?のリストから選択したものを、別のワークシート内の コンボボックスに自動的に表示させるにはどうすればよいのでしょうか? つまり、ワークシート1のリスト(A,B,C)から「A」を選択すると、 ワークシート3のリスト(A,B,C)も自動的に「A」が表示されるように したいのです。 用語が間違っているかもしれませんが、よろしくお願いします。

  • テキストファイルの各行の文字列を、コンボBoxに表示させたい

    テキストファイルの各行の文字列を、コンボBoxに表示させたい 現在VC++ MFCの勉強をしております。(MFCに拘ってはおりません) 下のテキストファイル"D:\data.txt" (Shift_JIS)から (内容) 田中さん 斉藤さん 吉田さん CFile の Read で一行ずつ読み込んで、CStringArrayを使って コンボBox に Insert したいと思っています。 下記のコードについてですが。 BOOL CAddDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: ここに初期化を追加してください TCHAR* pszFileName = L"d:\\data.txt"; CFileException fileException; CFile cFile; int ret; char buffLine[256] ; CStringArray cStrComboArr ; // リスト ret = cFile.Open( pszFileName , CFile::modeRead | CFile::shareDenyNone , &fileException ); if ( ret == false ) { AfxMessageBox( L"ファイルが読込めません。" ); return 1; } while ( (ret = cFile.Read( &buffLine , 256 )) != 0 ) { cStrComboArr.Add( buffLine ); /* ここでビルドエラー */ } cFile.Close(); // コンボboxに入れる CComboBoxEx* pCombo = (CComboBoxEx*) GetDlgItem( IDC_COMBOBOXEX1 ); COMBOBOXEXITEM cbi ; cbi.mask = CBEIF_TEXT; for ( int i = 0; i < cStrComboArr.GetCount(); i++ ) { cbi.iItem = i; cbi.pszText = (LPTSTR)(LPCTSTR) cStrComboArr.ElementAt(i) ; // 「'CString' から 'LPWSTR' に変換できません」から。 cbi.cchTextMax = 256; pCombo->InsertItem( &cbi ); } return TRUE; // return TRUE unless you set the focus to a control // 例外 : OCX プロパティ ページは必ず FALSE を返します。 } cStrComboArr.Add( buffLine ); の部分でエラー表示は、 「INT_PTR CStringArray::Add(LPCTSTR)' : 1 番目の引数を 'char [256]' から 'LPCTSTR' に変換できません。」です。 根本的にやり方が間違っているのか、もう少しのところなのか、 ズバッとご指摘いただけないでしょうか。 宜しくお願いします。 OS : Vista Home Premium VS 2008 pro

  • 【急いでます】コンボボックスのデータ型のエラー

    リストボックスにテーブルAのフィールド名を表示させフィールドを選択、オプショングループで演算子(=、>など)を選択、コンボボックスにそのフィールドのソースが表示されリストから値を選択し検索をかけたいと思っています。 リストボックスで数値型のフィールドを選択し、コンボボックスから値を選択するまではいいのですが、 その後リストボックスでテキスト型のフィールドに変更すると、コンボボックスにソースは表示されるのですが選択しようとすると、 このフィールドに入力した値が正しくありません。 たとえば、数値型のフィールドに文字列を入力しました。 とエラーが出てしまいます。 コンボボックスに前に選択したデータ型が残ってしまっているようなのです。 WEBでも検索し、色々試したのですがどれもうまくいきません。 これを回避する方法はないでしょうか? ---<現在のソース>---------------------------------------------------------------- リストボックス:listfield 演算子オプショングループ:opgEnzan コンボボックス:cboJoken Private Sub Form_Open(Cancel As Integer) strTable = lstfield.RowSource End Sub Private Sub lstfield_Click() opgEnzan = False End Sub Private Sub opgEnzan_Click() cboJoken.RowSource = "" cboJoken.RowSource = "SELECT DISTINCT " & lstfield & " FROM " & strTable & ";" cboJoken = Null cboJoken.ColumnWidths = "0cm" cboJoken.ColumnWidths = "4.5cm" cboJoken.SetFocus SendKeys "{F4}" End Sub

  • ACCESSのコンボボックスにレコードセットでリストを表示させています

    ACCESSのコンボボックスにレコードセットでリストを表示させています。 2列表示で1を連結させています。 この状態で、コンボボックスの入力チェックを「はい」にすると、コンボボックスに直接入力したときに、「リストにありませんと」エラーになってしまいます。 リストから選択すれば、大丈夫なのですが・・・。 コンボボックスにレコードセットを使用したときには、入力チェックは使えないのでしょうか? Accessのバージョンは2003です。 よろしくお願いします。

  • Accessレポートでコンボボックスが動かない

    Access2010のレポートでコンボボックスを使いたいのですが、コンボボックスが正しく表示されず困っています。 表示されないというのは、コンボボックスのリストを選択する逆三角形が表示されず、またリストも全く表示されません。つまりテキストボックスのように空のの四角い箱が表示されてしまいます。 表示したいリストはあるテーブルから引っ張っているのですが、全く同じことをリストボックスでやろうとするとすべての項目がうまく表示できることは確認しました。 またフォームの方ではコンボボックスをから項目が選択できることも確認できています。 レポートではコンボボックスが使えないような仕様になっているのでしょうか? お分かりになる方教えていただけますでしょうか?

  • 複数のコンボボックスの項目の表示/非表示について(VB6.0)

    コンボボックスにて Combo1(0)のリスト "A" "B" "C" Combo1(1)のリスト "A" "B" "C" Combo1(2)のリスト "A" "B" "C" Combo1(3)のリスト  ・  ・  ・ と複数のコンボボックスを用意し、それらのコンボボックスにおいて表示するの内容を全て同じ内容にします。この時、例えばCombo1(0)で"A"が選択されると、他のコンボボックスでは"A"がリストに表示されなくなる、またCombo1(0)にて"A"を選択解除すると他のコンボボックスにおいて再度"A"がリストに表示されるという様に、同じリストを持つ複数のコンボボックスにおいて、重複選択できないように表示/非表示を切り替えたいのですが上手い方法が思いつきません。分かる方がおられましたら御教授宜しくお願いします。

  • vbaについて教えてください

    エクセルでワークシートに貼ったコマンドボタンをクリックするとユーザーフォームを呼び出してかつ、ユーザーフォーム上のコンボボックスに指定フォルダ下のフォルダを表示するものを作りました。 ユーザーフォーム上のコンボボックスに表示されたフォルダを切替選択するとリストボックスにそのフォルダ下のファイルを表示させたいのですがやり方がわかりませんので教えてください。

  • エクセルのコンボボックスについて質問です。

    エクセルのコンボボックスについて質問です。 まずワークシートのA列に「県名」、B列に「名前」を入力したとします。 A列 B列 福岡 たかし 長崎 なおこ 長崎 きょうこ 佐賀 つとむ として、ユーザーフォームにコンボボックスを2つ作ります。 まず、コンボボックス1に「県名」を表示させて、コンボボックス2には、 コンボボックス1で選んだ「県名」にあてはまる「名前」だけを 表示させたいんですが、どういう記述をすれば宜しいでしょうか? (例) コンボボックス1で「長崎」を選択したら、コンボボックス2に「なおこ・きょうこ」とリストができるようにしたい

専門家に質問してみよう