2013-02-08 20 views
5

Ich habe Schwierigkeiten, Dateien aus einem Verzeichnis zu öffnen, das sich in einem anderen Ordner als der exe befindet. Ich habe es geschafft, eine Datei zu lesen. Aber wie man mehrere Dateien liest, die in dem Verzeichnis in der Schleife unter Verwendung des Programms vorhanden sind.Multiple Dateien aus einem Verzeichnis lesen

Der Code für die einzelne Dateiverarbeitung verwendet wird, ist unter:

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

So Datei Ich bin in der Lage zu verarbeiten, um die Variablen in der Datei zu analysieren und die Längen der Saiten zu bekommen. Das Problem ist, wie mehr Dateien zu öffnen Ich habe Dateinamen im Ordner Sprache:

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

Wie kann ich Öffnen von Dateien dieses Namen in einer Schleife?

Gibt es auch eine Möglichkeit, den Pfad des Ordners D:/folder/language im Allgemeinen zu geben?

Vielen Dank im Voraus.

Antwort

0

Sie den Pfad als Befehlszeilenargument in Ihr Programm übergeben konnte, seinen Wert von argv[1] zu lesen, wenn es das erste Argument ist, dann die Schleife durch die verschiedenen Dateien, die Sie lesen möchten:

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

Danke, das wird mir sicherlich helfen. Werde versuchen, diese Methode – tanve3r

0

Ich empfehle Beginnen Sie mit dem eigentlichen Parsen der Datei in eine separate Funktion, so dass Sie diese Funktion nur mit dem Dateinamen aufrufen können.

Die einfachste Sache wäre, eine Tabelle mit den Dateinamen zu haben und diese Tabelle durchzulaufen, die die Dateinamen zu der soeben erstellten Funktion gibt.

+0

Vielen Dank, dass Sie das Parsing mit Funktion.simonc hat ein gutes Beispiel zur Verfügung gestellt wird es mit der Funktion zusammenführen – tanve3r

0

Sie könnten das Programm neu schreiben, indem Sie Funktionalität in eine Funktion say processFile (char * fileName) setzen und dann die Funktion mit vollständigen Pfadnamen wie z.

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

Auch Sie könnten Dateinamen setzen in einer Datei und schreiben Sie das Programm in einer Schleife über die Zeilen in dieser Datei und rufen Sie die Funktion mit Dateinamen zu verarbeiten es findet.

0

Wie simonc gesagt hat, können Sie den Pfad zu den .h's über argv geben, aber das Problem ist, dass dies noch erfordert, dass Sie die Namen der .h's zur Kompilierzeit kennen.

Ich nehme an, dass Sie über alle .h's in einem Verzeichnis durchlaufen möchten. Es gibt Bibliotheken, die Sie tun, um diese Cross-Plattform lassen (für diese Keywords suchen), oder Sie können es auf Ihrem OS dep tun:

  • Linux: ->dirent

  • Fenster: Findfirstfile Findnextfile - >msdn

    (oder, ein wenig hackish aber vielleicht für Sie viel einfacher: erstes Einsatz system()/ls dir * .h in eine .txt-Datei, dann ist das lesen)

Verwandte Themen