Pointer&Linker Problem beim Dir einlesen (Windows)

Cusco

Erfahrenes Mitglied
Ich möchte mir ein Prog schreiben welches HTML-Dateien auslesen kann, aber ich scheiter schon am Verzeichnis einlesen, an einen Pointer & Linker - Problem unter Borland 5.5 bei der Windows-Funktion FEnumFiles(). Der compiler meldet 3x Pointerwarnungen bei eben dieser Funktion, Ausserdem kann der Source nicht gelinkt werden weil er _ FEnumFiles nicht findet.

Code:
#include <stdio.h>
#include <edksetup.h>

main(int argc,char *argv[])
{  
    HANDLE hEnumFile = NULL;
    char szSearchString[] = "d:\\DListTestDir\*.html";
    char szFileName[100];
    BOOL fDir = 0;
    while(FEnumFiles(&hEnumFile, &szSearchString, &szFileName, &fDir))
     {
        if(fDir)
        {
          printf("DIR: '%s'",szFileName);
        }
        else
        {
          printf("FILE: '%s'",szFileName);
        }
     }
   return 0;
}

Und noch ein Problem, ich weiss nicht wie ich den Pattern angeben soll damit er alle *.html und *.htm Dateien auflistet, ich habe mit Window und C noch recht wenig Erfahrung
 
Moin moin,

ich bin mit Borland absolut nicht vertraut, aber so wie es aussieht, solltest du dir noch mal das Thema Arrays antun.

Die Adresse eines Arrays ist nix anderes als ein Pointer auf ein Element;-)

Du übergibst deiner Funktion - die wie ich annehme Pointer erwartet - also keine Pointer auf die Elemente sondern Pointer auf die Pointer, die dann wiederum auf die Elemente zeigen.
Ein HANDLE ist ebenfalls schon ein Pointer, hier gilt also das selbe wie bei den Arrays
Änder mal deinen Code so ab:
Code:
FEnumFiles(hEnumFile, szSearchString, szFileName, &fDir)
Gruss Michael
 
Nein Klappt auch nicht in der Header sieht es so aus:

Das Beispiel ist Falsch, es muss FEnumFiles, statt fEnumFiles heissen, ich würde mich nicht wundern wenn da noch mehr fehler drin sind.

Code:
//$--FEnumFiles-----------------------------------------------------------------
//  This function provides a wrapper for the FindFirstFile() and FindNextFile()
//  functions. Given a search string [Drive:][PATH\\]SearchPattern this 
//  function will place file names (one per call) in pszFileName. When there
//  are no more files that match the search string it will return FALSE. It
//  will filter out the . and .. directories. This function is generally used
//  like this:
//
//      hEnumFile = NULL;
//	    while(fEnumFiles(&hEnumFile, szSearchString, szFileName, &fDir))
//      {
//	        if(fDir) ProcessDir(szFileName);
//	        else     ProcessFile(szFileName);
//		}
//
// -----------------------------------------------------------------------------
BOOL FEnumFiles(                    // RETURNS: TRUE if a file/dir was found
	IN     CHAR   *pszSearchString, // directory & search pattern
	IN OUT HANDLE *phScan,          // a pointer to EnumFiles instance handle 
    OUT    CHAR   *pszFileName,     // current file name
    OUT    BOOL   *pfDir);          // TRUE if a directory was found

Also wie muss ich die Variablen deklarieren und einsetzen? Ich habe schon verschiedenes Versucht inzwischen gibt es aber nur noch eine Pointerwarnung die Compilermeldung sagt aber nicht welche Variable :(
 
Zuletzt bearbeitet:
Ich versteh zwar jetzt nicht, warum die ersten beiden Parameter getauscht sind, aber probier es mal so
Code:
    HANDLE hEnumFile = NULL;
    char szSearchString[] = "d:\\DListTestDir\*.html";
    char szFileName[100];
    BOOL fDir = 0;
    while(FEnumFiles(hEnumFile, (char*)szSearchString, (char*)szFileName, &fDir))

Wo das Handle genau hin muss musste ausprobieren...
 
Ich kenne die Funktion zwar nicht, da ich keinen Borland installiert habe, aber meiner Meinung nach sollte der Aufruf entweder so
Code:
 FEnumFiles(&hEnumFile, (char*)szSearchString, (char*)szFileName, &fDir)
oder so
Code:
 FEnumFiles((char*)szSearchString, &hEnumFile, (char*)szFileName, &fDir)
aussehen (Je nachdem, welche Parameterreihenfolge richtig ist). Auf jeden Fall mußt Du einen Zeiger auf das Handle übergeben, nicht das Handle selber.
 
Hi.

@jokey2, @CodeFatal: Cusco hat doch bereits den entscheidenden Teil aus der edksetup.h gepostet und da steht auch wie die Parameter zu verwenden sind - ganz vorbildlich anhand eines Beispiels. Das Problem ist nur die Funktion ist aus dem Microsoft Exchange SDK (edk) und es fehlt irgendwo die Bibliothek um es erfolgreich zu linken.

In der MSDN findet sich freilich keine Referenz auf die Funktion was wohl bedeutet das sie veraltet ist. Evtl. würde es helfen das Exchange SDK zu installieren (gib's zum Download) aber das ist wahrscheinlich viel mehr Aufwand als einfach die FindFirstFile und FindNextFile Funktionen zu verwenden.

Gruß
 
Stimmt wohl so gesammt, aber mal ehrlich... auch wenn ich blind, begriffsstutzig und was weiss ich noch bin aber das Beispiel passt nicht zum Funktionsheader!

Und ob die Funktion beim Borland Compiler exestiert oder nicht weiss ich auch nicht da wie jockey2 und ich bereits sagten, kennen wir uns da nicht aus... In diesem Fall ist dies auch das falsche Forum!

Also konnten wir nur auf die Syntax achten...

Gruss Michael
 
CodeFatal hat gesagt.:
auch wenn ich blind, begriffsstutzig und was weiss ich noch bin
:-) Hat ja aber keiner behauptet. Mit dem falschen Beispiel hast du natürlich Recht - das hab ich dann wieder übersehen. Im Zweifelsfall würd ich aber der Deklaration den Vorrang geben und den ersten u. zweiten Parameter austauschen.

Und ob die Funktion beim Borland Compiler exestiert oder nicht weiss ich auch nicht
Hat wie gesagt mit dem Borland Compiler nix zu tun da es sich um eine Funktion aus dem EDK von Microsoft handelt. (jedenfalls nach dem was ich bei Google gefunden hab) Offensichtlich kennst du dich also mit dem EDK von Microsoft auch nicht aus ;)

Gruß
 
Stimmt tu ich nicht...
Deswegen lass ich auch in Sachen "Hilfe anderen geben" in diesem Punkt die Finger von...;-)

Gibts denn da was interessantes, was man unbedingt brauch oder gegenüber der sdk besser nutzen sollte :confused:

Lern ja gerne dazu und schau über den Rand des eigenen Tellers ;-)
 
Ich hab auch keine Ahnung vom EDK - braucht man halt zur Programmierung von irgendwelchen Exchange Applikationen. Wie gesagt, im MSDN steht die Funktion FEnumFiles nicht drin und Google findet auch nur 3 bis 5 Referenzen. Ich würde halt einfach die Standardfunktionen aus dem Plattform SDK nehmen.

Gruß
 
Zurück