2011-10-29 25 views
1

プロジェクトのプロパティでコマンドライン引数を設定するとファイルを開くことができませんが、コマンドプロンプトからプログラムを実行すると同じフォルダにプログラムproba2.exeとtext.txtがあります正常に動作します。Cプログラムはファイルを開くことができません

/* count.c -- using standard I/O */ 
#include <stdio.h> 

#include <stdlib.h> // ANSI C exit() prototype 
int main(int argc, char *argv[]) 
{ 
    int ch;   // place to store each character as read 
    FILE *fp;  // "file pointer" 
    long count = 0; 

    if (argc != 2) 
    { 
     printf("Usage: %s filename\n", argv[0]); 
     exit(1); 
    } 
    if ((fp = fopen(argv[1], "r")) == NULL) 
    { 
     printf("Can't open %s\n", argv[1]); 
     exit(1); 
    } 
    while ((ch = getc(fp)) != EOF) 
    { 
     putc(ch,stdout); // same as putchar(ch); 
     count++; 
    } 
    fclose(fp); 
    printf("File %s has %ld characters\n", argv[1], count); 

    return 0; 
} 

enter image description here

enter image description here enter image description here

それはまた、正常に動作します(ただし、ファイル名のフルパスを書き込み)cmd.exeの enter image description here から罰金ランニングに動作します私は、フルパスを指定するときコマンド引数プロジェクトプロパティウィンドウ enter image description here

+0

実行コンフィギュレーションオプションで作業ディレクトリを追加しようとしています –

+0

Netbeansから実行すると、 users \ don \ documents \ netbeansprojects \ proba2、 – nos

答えて

3

実行中のプログラムの作業ディレクトリが、エクスプローラからプログラムファイルを起動したときに保存されているものと同じであることを確認してください。私はこれがWindowsでどこに設定できるのか分かりませんが、これは問題だと思います。

+0

を確認しようとすると、画像2のファイルtext.txtファイルがデバッグディレクトリにあり、cd.exeコマンドでディレクトリを変更するとproba2.exeと表示されます。 .exe text.txtとプログラムは正常に動作しますが、プロジェクトのプロパティからフルパスとプログラムコードprintf( "ファイル%sは%ld文字を持っています\ n"、argv [1]、count)を入力する必要があります。フルパスをファイルの名前として書き込みます。私は間違ったデバッグディレクトリにtext.txtファイルを置いたかと思います。 – gameboy

+1

ファイルが正しいディレクトリにあります。 cmdシェルからプログラムを起動すると、現在の作業ディレクトリは.exeファイルがあるディレクトリになります。したがって、コマンドラインパラメータとしてtext.txtファイルの名前を渡すだけで十分です。他の方法(IDEやエクスプローラなど)でプログラムを起動すると、別の作業ディレクトリで起動される可能性があります。現在の作業ディレクトリを確認するには、次の関数を呼び出します。char * getcwd(char * buffer、int size); http://msdn.microsoft.com/en-US/library/ms235450%28v=VS.80%29.aspx – Giorgio

関連する問題