2013-02-08 10 views
5

exe以外のフォルダにあるファイルを開くことができません。私は1つのファイルを読むことができました。しかし、プログラムを使用してループ内のディレクトリに存在する複数のファイルを読み取る方法。ディレクトリから複数のファイルを読む

単一ファイルの処理のために使用されるコードは以下の通りです:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    FILE *fp, *tp, *tl; 
    char str_buff[1024] = { FALSE }; 
    char str[125]; 
    char strlengths[MAX_NO_OF_STRINGS]= { FALSE }; 
    //int Result; 
    //int string_startflag = FALSE; 
    int string_cntr = FALSE,i = 0, n = 0; 

    fp = fopen("D:/folder/language/stringEnglish.h", "r"); 
    tp = fopen("New Text Document.txt", "w"); // open the file to Write 
    tl = fopen("New Length Document.txt", "w"); // open the file to Write lengths 

    while (NULL != fgets(str_buff, sizeof(str_buff), fp)) 
    { 
     sscanf(str_buff, "%*[^\"]%*c%[^\"]%*c%*[^\n]%*c", str); 

     //printf("%s\n", str); 

     if (string_cntr > 6) 
     { 
      if (string_cntr<= MAX_NO_OF_STRINGS) 
      { 
       fprintf(tp, "%s\n", str); 
       strlengths[i] = strlen(str); 
       i++; 
      } 
     } 
     string_cntr++; 
    } 

    for(n=0;n<(MAX_NO_OF_STRINGS-6);n++) 
    { 
     fprintf(tl,"%d\n",strlengths[n]); 
    } 

    fclose(fp); 
    fclose(tp); 
    fclose(tl); 

    return 0; 
} 

だから私は、ファイル内の変数を解析して、文字列の長さを取得するためにファイルを処理することができますよ。問題は、複数のファイルを開く方法です。フォルダ名のファイル名は次のようになります。

stringItalian.h,stringLatvian.h,stringSlovakian.h,stringSlovenian.h,stringSpanish.h,stringSwedish.h,stringTurkish.h,stringUkrainian.h 

これらの名前のファイルをループで開くにはどうすればよいですか?

また、一般的な方法でフォルダD:/folder/languageのパスを指定する方法はありますか?

ありがとうございます。それは最初の引数である場合

答えて

0

あなたが読みたい別のファイルをループその後、argv[1]からその値を読んで、あなたのプログラムにコマンドライン引数としてパスを渡すことができます。

int main(int argc, char* argv[]) 
{ 
    ... 
    const char* files[] = {"stringItalian.h", "stringLatvian.h", 
          "stringSlovakian.h", "stringSlovenian.h", 
          "stringSpanish.h", "stringSwedish.h", 
          "stringTurkish.h", "stringUkrainian.h"}; 
    int i; 
    char fullpath[256]; 

    for (i=0; i<sizeof(files)/sizeof(files[0]); i++) { 
     strcpy(fullpath, argv[1]); 
     strcat(fullpath, files[i]); 
     fp = fopen(fullpath, "r"); 
+0

どうもありがとうございました。このメソッドを試してみます – tanve3r

0

私がお勧めしますファイルの実際の解析を別の関数に入れて開始することで、ファイル名だけでその関数を呼び出すことができます。

最も簡単なことは、ファイル名を持つテーブルを作成し、このテーブルをループして、作成したばかりの関数にファイル名を渡すことです。

+0

関数を使用して解析することに感謝します。関数を使用して良い例を提供しています。関数を使用してマージする – tanve3r

0

関数を関数processFile(char * fileName)に入れて、関数をフルパスのファイル名で呼び出すなどして、プログラムを書き直すことができます。

processFile("D:/folder/language/stringEnglish.h"); 
processFile("D:/folder/language/stringItalian.h"); 

また、あなたはファイルに処理するために、ファイル名を入れて、そのファイル内の行をループにプログラムを書き換え、それが見つかったファイル名で関数を呼び出すことができます。

0

simoncは.hのパスをargv経由で与えることができると言っていますが、問題はこれでもコンパイル時に.hの名前が分かっている必要があるということです。

すべての.hがディレクトリにループしているとします。そこには、このクロスプラットフォーム(これらのキーワードで検索を)やらせるライブラリがある、またはあなたはそれがあなたのOS上でDEP行うことができます。

  • Linuxの場合: - >dirent

  • のWindows:FindFirstFile FindNextFile - >msdn

    (または、少しハックが、あなたのために、多分ずっと楽:DIR/LSに最初に使用するシステム()* .hの.txtファイルに変換し、その読み)

関連する問題