6

我很难从与 exe 不同的文件夹中的目录打开文件。我设法读取了一个文件。但是如何使用程序读取目录中存在的多个文件。

用于单个文件处理的代码如下:

#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

您可以将路径作为命令行参数传递到您的程序中,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 回答
0

我建议首先将文件的实际解析放入一个单独的函数中,这样您就可以只使用文件名调用该函数。

最简单的方法是创建一个包含文件名的表,然后循环遍历该表,将文件名提供给您刚刚创建的函数。

于 2013-02-08T10:37:59.750 回答
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 的名称。

I assume that you want to loop over all .h's in a directory. There are libraries that let you do this cross-platform (search for these keywords), or you can do it dep on your OS:

  • Linux: -> dirent

  • Windows: FindFirstFile FindNextFile -> msdn

    (or, a little hackish but maybe a lot easier for you: first use system() to dir/ls *.h into a .txt file, then read that)

于 2013-02-08T10:47:56.537 回答