6

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か?

4

4 に答える 4

0

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

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

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

于 2013-02-08T10:41:08.253 に答える
0

simonc が言ったように、.h へのパスを 経由argvで指定できますが、問題は、コンパイル時に .h の名前を知っている必要があることです。

directory 内のすべての .hをループしたいとします。このクロスプラットフォームを実行できるライブラリがあります (これらのキーワードを検索します)。または、OS に依存して実行できます。

  • Linux: -> dirent

  • Windows: FindFirstFile FindNextFile -> msdn

    (または、少しハックですが、おそらくはるかに簡単です。最初に system() を使用して dir/ls *.h を .txt ファイルに変換し、それを読み取ります)

于 2013-02-08T10:47:56.537 に答える
0

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

最も簡単な方法は、ファイル名のテーブルを用意し、このテーブルをループして、作成したばかりの関数にファイル名を与えることです。

于 2013-02-08T10:37:59.750 に答える
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");
于 2013-02-08T10:36:32.260 に答える