findfirstfile findnextfile



  • Hallo zusammen

    Ich suche zum Thema "findfirstfile findnextfile" ein Quellcode.
    Denn es mir ermöglichen soll, alle txt-Dateien aus einem Bestimmten Verzeichns aufzulisten. Danke für eure Hilfe

    Gruss Porsche





  • Danke für deine Antwort

    Diese funktionieren bei mir nicht - mache ich vielleicht etwas falsch?

    Gruss Porsche2012



  • Ja, Du machst was falsch.
    1. keine exakte Fehlerbschreibung ("geht nicht" ist garnichts)
    2. Keine Angabe Os, Compiler, Sprache
    3. Posten des Quellecode-

    Diese API gehört mit zum ältesten Teil der WinApi und läuft mit jeder Windows Verion.



  • Hallo

    Ich habe folgender Code eingegeben

    #include <iostream>
    #include <windows.h>
    #include <string>
    using namespace std;
    
    int main()
    {   
        HANDLE fHandle;
        WIN32_FIND_DATA FindFileData; 
    	char Pfad[]="C:\\Test";
    	LPWSTR path;
    	MultiByteToWideChar(CP_ACP,NULL,Pfad,-1,path,5);    
        fHandle=FindFirstFile( TEXT("C:\\Test"), &FindFileData);
        FindNextFile(fHandle,&FindFileData); 
        while (FindNextFile(fHandle,&FindFileData)) 
        { 
          if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
          { 
            cout<<"\n'Ein Ordner'\n\n";
            // keine Datei sondern ein Ordner 
          } 
          else 
          {     
            cout<<"Folgende Datei gefunden: "<< FindFileData.cFileName <<"\n";
          } 
        } 
        FindClose(fHandle);
        cin.get();
        return 0;
    }
    

    Das Programm lässt sich zwar kompilieren und Ausführen, aber beim Ausführen erhalte ich kein Ergebnis nur ein schwarzes Fenster. Zudem erfolget folgende Fehlermeldung.
    C:\Dokumente und Einstellungen\Administrator\Desktop\TestFFFN.cpp [Warning] passing NULL used for non-pointer converting 2 of `int MultiByteToWideChar(UINT, DWORD, const CHAR*, int, WCHAR*, int)'

    Danke für eure Hilfe



  • hi,
    du hast eine kleinigkeit vergessen, nämlich ein sternchen
    (siehe mein kommentar im quellcode)
    btw. benutzt du unnötigerweise multbytetowidechar, wenn _UNICODE und UNICODE
    definiert ist, kannst du mit dem generischen datentypen TCHAR und mit dem macro _T (identisch mit dem TEXT macro ) arbeiten...
    http://msdn.microsoft.com/de-de/library/dybsewaf(v=vs.80).aspx
    oder wenn du eh nur wide character benötigst, kannst du auch gleich direkt wchar_t benutzen.

    #define _UNICODE
    #define UNICODE
    
    #include <windows.h>
    #include <tchar.h>
    
    int main()
    {  
        	HANDLE fHandle;
    	WIN32_FIND_DATA wfd;
    
    	TCHAR path[] = _T("C:\\*"); // <--------------- Hier hast du ein Sternchen vergessen.
    
    	fHandle = FindFirstFile(path, &wfd );  	// Erste Datei im Verzeichnis holen, die erste Datei ist ein "." und wird ignoriert. 
    	FindNextFile(fHandle,&wfd); // ".." wird ignoriert.
    
    	while (FindNextFile(fHandle,&wfd))
    	{
        		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        		{
          			// Hier könnten die Unterverzeichnisse gescannt werden.
        		}
        		else
        		{
    			_tprintf( _T("Folgende Datei gefunden: %ls\n"), wfd.cFileName );
        		}
    	}
    	FindClose(fHandle);
     	return 0;
    }
    


  • direkt mit wchar_t:

    #define UNICODE
    #include <windows.h>
    
    int main(void)
    {  
        	HANDLE fHandle;
    	WIN32_FIND_DATA wfd;
    
    	wchar_t path[] = L"C:\\* "; // <--------------- Hier hast du ein Sternchen vergessen.
    
    	fHandle = FindFirstFile(path, &wfd );  	// Erste Datei im Verzeichnis holen, die erste Datei ist ein "." und wird ignoriert. 
    	FindNextFile(fHandle,&wfd); // ".." wird ignoriert.
    
    	while (FindNextFile(fHandle,&wfd))
    	{
        		if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    		{
        		      			// Hier könnten die Unterverzeichnisse gescannt werden.
    		}
          		else
        		{
    			wprintf(L"%ls\n", wfd.cFileName );
    
        		}
    	} 
    	FindClose(fHandle);
     	return 0;
    }
    

Anmelden zum Antworten