• 締切済み

デバッガでのfopenの動作

Visual Studio 2005 を使っています。 Win32コンソールプログラムでプログラムを作成しました。 fopenを使ってファイルを読み込むプログラムで、 DOS窓では正しく動作するのに、 デバッガでトレースするとファイルポインタにNULLが返ってしまいます。 アドバイスいただければと思います。

みんなの回答

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

本当に絶対パスで失敗するのであれば、再現環境の提示が必要ですね。 再現できる簡単なソースと、 プロジェクトおよび対象ファイルのパスなどを開示いただかないと、 多分、他人には答えられないのではないかと。 その絶対パス指定で、コマンドラインではオープンできますか? あと、実行時に誰かがオープンしたままになってるとか言うこともないですか?

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

多分、デバッグ時のカレントディレクトリの設定が違うため、 ファイルが開けていません。 プロジェクトのプロパティ、デバッグにある 「作業ディレクトリ」でカレントディレクトリが設定できるので、 ここのパスをあわせてください。

yamato0917
質問者

補足

ファイル名はプログラム中に絶対パスで指定して試してみたのでその点は関係ないと思います。

関連するQ&A

  • Visual C++ 2010 Expressについて質問です

    Visual C++ 2010 Expressについて質問です Visual C++ 2010 Expressを用いてopenCVを使ったプログラムを作成したいと考えています そこで、インクルードファイルの設定やライブラリファイルの設定を以下のサイトの通りにしたのですが http://d.hatena.ne.jp/blono/20100501 うまくいきません Visual C++ 2008 Expressでは通っていたものをコピーしてビルドしたところ デバッガをVisual Studio 2005のものを使われようとしていました 上記のサイトではWin32プラットフォームアプリケーションにする場合とありましたが Win32コンソールアプリケーションで実行させたい場合にはどうしたらよいでしょうか? 言葉足らずだとは思いますがよろしくお願いします

  • デバッグしますか?というエラーメッセージ

    Microsoft Visual Studio 2005を入れてからなんですが、 他のプログラムを利用しているときたまに、 「ハンドルされていないWIN32の例外が発生しました」とメッセージが出て、 「利用可能なデバッガ」とでてそこの選択欄に「Microsoft Visual Studio 2005」 があります。 「選択したデバッガをデバッグしますか?」という項目で「はい」を選ぶと Microsoft Visual Studio 2005が立ち上がり、「いいえ」を選ぶと そのプログラムが強制終了します。 これは、なんでしょうか??困っています。

  • Visual StudioでDOS窓以外に出力する方法は?

    Visual Studio 2008 を使って、プログラミングの勉強をしてます。 まだコンソールアプリだけで、フォームアプリの勉強には入って いません。 ですので、出力は Console.WriteLine を使ってますけど、これで プログラムを実行すると、DOS窓に出力されます。結果を見るだけなら それでもいいんですけど、DOS窓からはクリップボードにコピーが 出来ないので、たとえば出力結果をこの掲示板に載せて質問したい 時とかは、自分でそれを見ながら打ち込まなければなりません。 DOS窓を開いて exe ファイルを叩いて実行すれば、ファイルに リダイレクト出来るのは分るんですけど、ディレクトリを移動する だけでも面倒ですし、プロジェクトごとにディレクトリが変わるので PATH を切っておく方法も使えません。Visual Studio から実行した 出力結果を、ファイルに出す方法ってありますでしょうか? 今はプロジェクトを作る時に「空のプロジェクト」を選んで、 「コードファイル」を追加してソースコードを打ち込んでます。

  • fopenで強制終了

    C++でGUIプログラムを作成しています。 char FN[200]; FILE *fp; ダイアログボックスで色々な値を入力 ↓ ファイル保存ダイアログでファイルを選択(FNに代入) ↓ MessageBox(NULL,FN,"",NULL); fp=fopen(FN,"w"); MessageBox(NULL,"","",NULL); fclose(fp); MessageBox(NULL,"","",NULL); のようにすると、1回目のダイアログボックスにファイル名が出たあと、強制終了してしまいます。 値を入力するダイアログボックスに文字列を入力していると強制終了し、文字列でなく数字を入力、または空欄にしておくと強制終了しないようです。 変数がかぶっているかもしれないと思いfpとFNでGREPしましたが、怪しいと思われるところはありませんでした。 場所的にfopenでエラーになっていると思うのですが、原因は何でしょうか。

  • fopenで開いたファイルのサイズを取得したい

    おはようございます。 Javaはそれなりに経験があるのですが、Cの経験は皆無に等しいものです。 FILE *fp; fp = fopen("C:\hoge.txt","r"); if(::GetFileSize(fp,NULL)>1000000){ ログをバックアップに格納し、新しいファイルを作る; } としたところ、ファイルの中身が空でもif文の中を通るようになってしまいました。 ファイルサイズがうまくとれていないようなのですが、どこに原因があるのでしょうか。 クイックウォッチをしようしても中の値が見れません。。。。。 環境はMicrosoft Visual Studio .NET 2003 + WinXPです。 よろしくお願いいたします。

  • devpartner profiler community edition使い方

    devpartner profiler community editionの使い方について教えてください. Visual c++ (Visual studio 2005)でc言語の初歩的なプログラムを書いていますが, 上記のプロファイラを用いたところ, プログラムのfopenの箇所でオープンが出来ませんでした. if((fp = fopen(filename_def, "r")) == NULL) {  return 1; // ← 1 が返ってきてしまいます } プロファイリング結果は出力されますが,1が返ってきた時のものです. プロファイラを起動しないときは正しく動作します. fopenを正しく動作させるにはどのような設定が必要でしょうか? よろしくお願いいたします. (Windows XP SP3, Core 2 Duo 3.00GHz,メモリ2GBです)

  • Microsoft visual studio.NET2003

    Microsoft visual studio.NET2003をインストールしてvisual C++プロジェクト-Win32-Win32コンソールプロジェクト でプロジェクトを作成すると 「プログラムID VsWizard.VswizardEngine.7.1のオブジェクトを作成できません」とでてきて作成できません。どうすれば作成できるのでしょうか?OSはvistaを使っています。

  • fopenでのエラー

    こんばんわ、長田と申します。  現在WINNTserverのsp6で動作させるアプリを VC6作成しているのですが同一ファイルを一定周期(数秒)で オープン→ファイル処理→クローズと行っていると あるタイミングでファイルオープンエラーが発生してしまいます。  同一アプリケーションをWIN2000で動作させた場合は 発生しないのでOSに問題があるかと疑っている のですが、どなたかこのような現象に心当たりの ある方はいらっしゃらないでしょうか? ちなみに  ファイルオープンー>fopen()  ファイルクローズ->fclose() を使用しています。 宜しくお願いします。

  • ファイルをドロップするとfopenからファイルが作成できません

    C言語でコンソールアプリケーションを作っています。 ファイルをexeにドロップして実行し、別のファイルに結果を出力させたいのですが、出力ファイルが作成されません。 どのようにすればよろしいのでしょうか。 コンソールから渡すときはファイルが作成されます。 コンパイラはBorland C++ Compiler 5.5を使用しています。 以下にコードの一部を掲載します。 int main(int argc, char *argv[]) {  char filename[256];  FILE *inputFile;  FILE *outputFile;  int i;  for(i=1; i<argc; i++)  {   if((inputFile=fopen(filename,"r")) == NULL)   {/*エラー処理*/}   sprintf(filename,"result%d.txt",i); // 出力ファイル名   if((outputFile=fopen(filename,"w")) == NULL)   {/*エラー処理*/}   for(;;)   {    char ss[1024];    if(fgets(ss,1024,inputFile) ==NULL) break;    fputs(ss,outputFile);   }   fclose(inputFile);   fclose(outputFile);  }  return 0; }

  • fopen関数について

    ----------------------------------------- #include<stdio.h> #include<stdlib.h> int main() { FILE *fp; char filename[80],ss[256]; printf("ファイル名="); gets(filename); if((fp=fopen(filename,"r"))==NULL){ printf("ファイルをオープンできません.\n"); exit(1); } while(fgets(ss,256,fp)!=NULL){ printf("%s",ss); } puts(""); fclose(fp); return 0; } ----------------------------------------- 初心者な内容の質問ですいません。 以上のプログラムでまず、「gets(filename);」により、「filename[80]」の配列に「aaa.txt」という文字列を格納し、そのファイルをfopenで読もう込もうとしています。 そこで、 if((fp=fopen(filename,"r"))==NULL) の部分に疑問があるのですが、「filename」という配列名だけで中身の「aaa.txt」と何故認識できるのでしょうか? 配列名ということで、先頭アドレスのみの情報しかないと思いました。 教えていただければ嬉しいです。

専門家に質問してみよう