• ベストアンサー

csvfileがあるかを判定する関数を教えて下さい。

こんにちは。今、とっても困ってます。助けてください。 VCで作ったプログラムなのですが、exeが開かない現象が起きました。 原因はcsvfileが存在しないためでした。存在しなかったとき、fileが無いことを判定してエラーメッセージか何かを出そうと思ってます。 質問事項 1.csvfileがあるかを見る関数 2.ダイアログを出す以外の方法で、エラーを教える方法 いい方法・案があったら教えて下さい。

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

ファイルオープンでファイルの有無を判定するのは、常套手段ですね。ファイルをオープンして、エラーをキャッチ、スローされた情報を元にエラー内容を判定します。 TRY {  CFile f(pFileName, CFile::modeRead); } CATCH( CFileException, e) {  if( e->m_cause == CFileException::fileNotFound )   Beep();   printf( "ERROR: File not found\n"); } END_CATCH 詳しくはマニュアルを見てください。

German
質問者

お礼

再び分かりやすいアドバイスありがとうございました。 この数日でいろいろ試してみました。yatokesaさんのソースを参考に完成しました。さっき出来上がって達成感を味わっているところです。本当にありがとうございました。

その他の回答 (3)

  • mkii
  • ベストアンサー率40% (43/105)
回答No.4

1. の答え Cライブラリだったら _stat WIn32 APIだったら PathFileExists だったかな? 2. の答え ログファイルに吐いておく

German
質問者

お礼

お忙しいところありがとうございました。 新しい関数が勉強できてよかったです。 *2のファイルの有り無しの処理について* ONLINEでデータを取得しグラフに表示するというプログラムなのでダイアログをそこで出すとボタンを押すまで機能が止まってしまうのでダイアログはやめました。 親切にありがとうございました。

  • nabezo-
  • ベストアンサー率50% (2/4)
回答No.3

「関数で、fileがあるかを判定し、フラグか何かで返してくれる 関数は無いですかね?あるとありがたいです。」 という件についてコメントします。 単にファイルの存在有無の確認でしたら、Win32API の FindFirstFile() という関数が使えると思います。

German
質問者

お礼

お忙しいところ目を通していただきありがとうございました。先ほど正常に動きを確認できました。 nabezo-さんのアドバイスのお陰で勉強になりました。 本当にありがとうございました。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.1

"csvfile"というのはご自身が作ったプログラム中で必要なファイルですか? ファイルをopenしようとしたときにエラーとなったらfileが存在しないと見なしてエラー処理を行えばよいのではないでしょうか。 ダイヤログ以外というと、ビープ(警告)音を鳴らす、ステータスバーにエラーを表示する...などですかね。

German
質問者

お礼

コメントありがとうございます。 ・関数で、fileがあるかを判定し、フラグか何かで返してくれる関数は無いですかね?あるとありがたいです。 ・ビープ音とダイアログに出せばエラーっぽくていい感じですね。やってみます。 いい案をありがとうございました。

関連するQ&A

  • ダイアログ上でファイルドラッグ判定

    はじめまして質問させてください。 VC++ 2005 MFC で開発しております。 ダイアログ上でファイルをドラッグしているかどうか 判定する実装方法を教えていただきたく思います。 仕様と致しまして、 MouseMoveメッセージで現在ファイルをドラッグしていることが 認識できれば良いです。 また、タイマーやスレッドで随時監視しておくといった方法でもかまいません。 なにかAPI等ご存知の方がおられましてら ご教授の程、宜しくお願い致します。

  • ダイアログを自分の好きな位置に表示したい

    VCで簡単なプログラムを造っています。 ダイアログベースです。 EXE を実行した時に表示されるダイアログを、自分の指定した位置に 表示させる方法はあるでしょうか。 また、そのダイアログから DoModal関数で別のダイアログを表示する場合、 同様に、自分の指定した位置に表示させる方法はあるでしょうか。 デフォルトのままだと、1つ目のダイアログは画面の中央に、 DoModal関数で表示させたダイアログは、1つ目のダイアログの上に なります。

  • 擬装プログラムの方法は?

    環境 WIN98 VC++6.0 にて 擬装プログラムなるものがあることを知りました。 そのプログラムの働きは、こんな感じです。 例えば、xxx.txtファイルをxxx.exeファイルに変換します。 そして、この変換されたexeファイルを起動すると、 ダイアログが表示されパスワードの入力が求められる。 このような、プログラムってどうやって作るのですか? 具体的な方法でなくて、考え方やイメージを教えてください。

  • [MFC]メッセージボックス内にメッセージを挿入する関数

    メッセージボックスが表示されるタイミングで、 他クラスからそれぞれ一行ずつメッセージボックス内にメッセージを追加し、 表示させるプログラムを作成したいのですが、 そのような関数は存在するのでしょうか? もし存在するのなら、ご存知の方教えていただけないでしょうか。 イメージとしては、 (1)Aクラス内でメッセージボックス宣言 (2)Bクラス、CクラスよりAクラスのボックス内にメッセージ挿入 (3)メッセージボックス表示 といった感じのものがあれば良いのですが。。。 【開発環境】 ・VC++2005(MFCダイアログベース) お手数ですが、どうか御回答お願い致します。

  • エラーの原因は?「この関数の定義が見つかりません」

    <プログラム環境> Windows XP VC++6.0 MFC AppWizard(exe) ダイアログベース <症状> ヘッダー void Transmit(HANDLE,OVERLAPPED,unsigned char[],DWORD,CString); cppファイル void CMyDlg::Transmit(HANDLE hCom,OVERLAPPED old,unsigned char ucBuf[],DWORD dwByte,CString s) { } とコーディングしていて、ビルドも実行も全く問題ないのですが、 ClassViewでTransmit(HANDLE,OVERLAPPED,unsigned char[],DWORD,CString) をダブルクリックして、関数に移ろうとすると 『この関数の定義(インプリメンテーション)が見つかりません』 というエラーが出ます。 <質問> このエラーは何が原因で出ているのでしょうか?? 宜しければご指摘の程お願い致します。

  • system関数(Windows)の戻り値!!

    こんにちは。 皆さんのお知恵をお借りしたいとおもいます。 現在Windows NT & VC++ でプログラムの勉強をしています。 例えば、aaa.cppのソース内で、exe(例えば、c:\work\sample.exe)を実行させて 成功したかどうか念の為、確認を行いたいと考えております。 ---aaa.cpp--- int rtn_flg; /* system関数の戻り値 */ (略) rtn_flg = system("c:\\work\\sample.exe"); /* sample.exeが正常に動作したか確認したい */ ------------- 上記のようなプログラムでsample.exeが正常に実行できたか、確認したいとかんがえております。 正常に実行できなかった場合というのは、たとえは『実行ファイルが存在しません。』などというシステムエラーです。 (sample.exe内で意図的にエラーをリターンしているといういみではありません。) 実際上記のプログラムを実行すると、正常にexeが動作したときも、例えばsample.exeの名称をssaammppllee.exeと実際にありえない名称にしても rtn_flg には"0"が返ってきます。 rtn_flgでexeが正常に動作したか、そうでないか確認できないものでしょうか? 大変わかりづらい質問でご面倒ですが、宜しくお願い致します。

  • OnInitDialog()の関数の組み込み方

    Visual Studio2005でC++のプログラミングを始めました。 (今まではVC++6.0を使っていました。) リソースエディタでダイアログを作り、新規クラスを作った後 このクラスにOnInitDialog()の関数を追加したいのですが リソースのプロパティのメッセージにはWM-INITDLGがありません。 どのようにして、この関数を追加しますか?

  • VC++ で別プログラムのexeをキックする方法

    開発環境:VC++6.0 別プログラムのexeをキックする方法(関数)? を教えてください 自分なりに「vc++ exe キック」などで検索したのですが 見つかりませんでした よろしくお願いします

  • VC++から引数付きexeファイルの実行

    タイトルの通り、VC++から外部ファイルを実行したいのですがどのような関数を使えばよいのでしょうか? exeファイルを実行中は親プロセスであるVCのプログラムの方を止めておきたいのです。 出来ればexeファイルは引数付きで実行したいと思いますので、よろしくお願いします。 開発環境はVisualStudio2005です。

  • VC++6.0で作成されたActiveXコントロール

    まだプログラミングを始めて日が浅いため、馬鹿な質問をしていたら申し訳ありません。 現在、ActiveXコントロールを使ったプログラムを作成しております。 メインの環境がVC++2008なのですが、このActiveXコントロールがVC++6.0で作られた物であるため、VC++2008で使用しようとするとエラーが出てしまいます。 またプログラム中で使っているライブラリの中でVC++6.0で動いてくれないものもあり、私としては慣れないVC++6.0より何とかして2008でこれを使いたいのですが・・・ 一応現在はVC++6.0でこのActiveXコントロールを動作させるプログラム(以下exeと略)を作り、このexeをVC++2008のプログラム内でCreateProcess関数で呼び出すと言う方法を取っています。 引数はコマンドライン引数、処理結果はファイル経由で受け渡しをしています。 このActiveXコントロールというのがあるカメラから画像を取得するものですので、どうして処理時間の長さが気になります。 そこでプロセスの起動と終了にかかる無駄な時間を減らすため、このexeをDLL化できないものかと考えています。 前置きが長くなりましたが、私が質問したいことは (1)「VC++6.0で作られたActiveXコントロール」を使用したDLLを作れるのか?作れるのならばそれはVC++2008で使えるのか? (2)DLL化以外に処理時間を短くする方法はないか?(例えばexeを立ち上げっぱなしにしたまま引数等をメインプログラムとやり取りできないか?) の2点です。 なおこのActiveXコントロールはソースがないため、VC++2008でビルドしなおすと言う手が使えません。 よろしくお願いします。