[c] Dateien öffnen, Variable Pointer

lexz

Erfahrenes Mitglied
Hey,
Also, das Programm soll einen bestimmten Ordner 'Ausgang' nach *.eml Dateien durchsuchen, diese wird dann im weiteren Programmablauf nach bestimmten Wörtern durchstöbert. So weit alles klar. Statisch(im Klartext: gebe eine Testmail.eml vor) gesehen funktioniert das auch, will ich es aber Variabel halten kann er mir die Dateien zwar als Strings wieder ausgeben, aber mit denen kann ich nicht mehr weiter arbeiten. Wie man in der Funktion ausgabe_datei sehen kann

Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <io.h>

void dir(const char *starpath);
void ausgabe(char *Dateien);
void ausgabe_datei(char *Dateienptr);

int main(void)
{
   char *param = "ausgang\\";

   dir(param);
   getch();
   return 0;
}

void dir(const char *startpath)
{
   struct _finddata_t fd;
   intptr_t hFile;
   char Dateien[60][60];
   char *Dateienptr;
   int done = 0;
   int i = 0;
   char fname[ _MAX_PATH ];

   sprintf(fname, "%s%s", startpath, "*.eml");

   if ( (hFile = _findfirst(fname, &fd )) != -1 )
   {
      while (!done)
      {
	   if (!(fd.name[0] == '.' && (fd.name[1] == 0 || fd.name[1] == '.' && fd.name[2] == 0)))
	   {
                strcpy(Dateien[i], fd.name);
        
                Dateienptr = Dateien[i];
	        //printf("%s\n", fd.name);
	        //printf("\n\n");
                //printf("\t%s\n", Dateien[i]);

                ausgabe(Dateienptr);
                ausgabe_datei(Dateienptr);
	        i++;
            }
	 
	     done = (_findnext(hFile, &fd) != 0);
	}
   }
}

void ausgabe(char *Dateien)
{
     printf("Dateien: %s\n", Dateien);
}

void ausgabe_datei(char *Dateienptr)
{
     FILE* pFile;

    pFile = fopen(Dateienptr, "r");
    if ( pFile == NULL )
        printf("bust\n");
    else
        printf("works\n");
}

Ja es geht noch anders Dateien aus dem Ordner auszulesen, würde aber gerne dieses erstma verstehen..

mfg

alex
 
Zuletzt bearbeitet:
Hi.

Das Problem wird sein, das die Dateien einfach nicht gefunden werden. Du übergibst ja auch nur den Dateinamen an fopen und damit schaut fopen im aktuellen Verzeichnis. Die Datei selbst dürfte sich ja im Unterverzeichnis "/ausgang" befinden.

Ein SetCurrentDirectory sollte wohl helfen. Oder du bastelst an jeden Dateinamen zumindest noch den relativen Pfad dran.

Gruß
 
Hm, ja das is so ein schöner Logikfehler ;)
Vllt hab ich noch einen, ich müsste doch dann einfach nur

Code:
     char ordner[] = "ausgabe\\\\";
     strcat(ordner, Dateien);

    pFile = fopen(ordner, "r");

einbinden und ändern, oder ?
Nun ja so weit zur Theorie, wenn ich dann 'ordner' ausgebe kommt auch der Pfad 'ausgabe\\Testmail1.eml' aber trotzdem is pFile leer.
Wer findet den Wurm ;).

ps. SetCurrentDirectory: finde dazu bei google nur c#, c++ etc. Beispiele aber keine c!
 
Code:
     char ordner[] = "ausgabe\\\\";
     strcat(ordner, Dateien);

    pFile = fopen(ordner, "r");

einbinden und ändern, oder ?
Wozu hast du jetzt da die Backslashes nochmal verdoppelt?

Dann ist in der Variable ordner kein Platz für weitere Zeichen. Es würde eher so funktionieren:
C:
char ordner[ _MAX_PATH ];

strcpy(ordner, "ausgabe\\");
strcat(...);
ps. SetCurrentDirectory: finde dazu bei google nur c#, c++ etc. Beispiele aber keine c!
SetCurrentDirectory ist eine Windows API Funktion: http://msdn2.microsoft.com/en-us/library/aa365530.aspx

Gruß
 
Ja, hast absolut Recht mit den slashes, frag mich nicht wie ich drauf gekommen bin ;).

Nun ja auch nicht weiter schlimm, da er es sowieso nicht Richtig macht..(OT: Wobei hier "Richtig" ja sehr von der Perspektive abhängt ;) TO)

Gucke mir mal die msdn an, Danke überhaupt schonmal für deine Hilfe ;)

mfg

alex

ps

Denke sollte öfters mal Pausen einlegen, habe den Fehler gefunden. Es heißt nicht "ausgabe\\" sonder "ausgang"...
ich könnte heulen :/
 
Zuletzt bearbeitet:
Zurück