2013-02-08 13 views
5

Mam trudności z otwieraniem plików z katalogu, który znajduje się w innym folderze niż plik exe. Udało mi się odczytać jeden plik. Ale jak odczytać wiele plików obecnych w katalogu w pętli za pomocą programu.Odczytywanie wielu plików z katalogu

Kod używany do przetwarzania pojedynczego pliku znajduje się poniżej:

#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; 
} 

Więc jestem w stanie przetworzyć plik do analizowania zmiennych w pliku i uzyskać długości strun. Problem polega na tym, jak otwierać wiele plików Mam nazwy plików w języku folderów:

Jak mogę otworzyć pliki tych nazw w pętli?

Czy istnieje sposób na podanie ścieżki folderu D:/folder/language w sposób ogólny?

Z góry dziękuję.

Odpowiedz

0

Ty mógł przejść ścieżkę jako wiersza polecenia argumentu do swojego programu, czytając swoją wartość z argv[1] jeśli jest to pierwszy argument, a następnie pętli różnych plików, które chcesz przeczytać:

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

Dziękuję, to na pewno mi pomoże. Spróbuję tej metody – tanve3r

0

polecam na początek, umieszczając rzeczywiste parsowanie pliku w oddzielnej funkcji, aby można było wywołać tę funkcję tylko z nazwą pliku.

Najprostszą rzeczą byłoby posiadanie tabeli z nazwami plików i przechodzenie do tej tabeli, podając nazwy plików do właśnie utworzonej funkcji.

+0

dziękuję zrobisz parsowanie za pomocą funkcji.simonc pod warunkiem, że dobrym przykładem będzie połączenie go za pomocą funkcji – tanve3r

0

Można napisać program ponownie, umieszczając funkcję wewnątrz funkcji, np. ProcessFile (char * fileName), a następnie wywołać funkcję z pełnymi nazwami ścieżek, np.

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

Również można umieścić nazwy plików do przetworzenia w pliku i przepisać program do pętli na linii w tym pliku i wywołać funkcję z nazwami plików, które znajdzie.

0

Jak powiedział simonc, można podać ścieżkę do .h przez argv, ale problem polega na tym, że nadal wymaga to znajomości nazw plików .h w czasie kompilacji.

Zakładam, że chcesz wykonać pętlę ponad .h należy do katalogu. Są to biblioteki, które pozwalają zrobić to cross-platform (wyszukiwania tych słów kluczowych), można też zrobić to dep od systemu operacyjnego:

  • Linux: ->dirent

  • Windows: FindFirstFile FindNextFile - >msdn

    (lub trochę hackish ale może dużo łatwiejsze dla Ciebie: System stosowanie pierwszy(), aby dir/ls * .h do pliku txt, a następnie odczytać tego)

Powiązane problemy