dateien in einem verzeichnis feststellen



  • habs noch nicht auf die reihe bekommen boost mit in codeblocks zu linken.



  • welche file_attribute gibt es noch?



  • Hallo

    das steht alles in der MSDN

    bis bald
    akari



  • http://msdn2.microsoft.com/de-de/library/3k3z0k7a.aspx

    und hier aus der winnt.h kopiert...

    #define FILE_ATTRIBUTE_READONLY             0x00000001  
    #define FILE_ATTRIBUTE_HIDDEN               0x00000002  
    #define FILE_ATTRIBUTE_SYSTEM               0x00000004  
    #define FILE_ATTRIBUTE_DIRECTORY            0x00000010  
    #define FILE_ATTRIBUTE_ARCHIVE              0x00000020  
    #define FILE_ATTRIBUTE_DEVICE               0x00000040  
    #define FILE_ATTRIBUTE_NORMAL               0x00000080  
    #define FILE_ATTRIBUTE_TEMPORARY            0x00000100  
    #define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200  
    #define FILE_ATTRIBUTE_REPARSE_POINT        0x00000400  
    #define FILE_ATTRIBUTE_COMPRESSED           0x00000800  
    #define FILE_ATTRIBUTE_OFFLINE              0x00001000  
    #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  0x00002000  
    #define FILE_ATTRIBUTE_ENCRYPTED            0x00004000
    


  • und nochmal eine frage: im laufwerk c: dort habe ich nur windows und den standart programmordner, wird mir der ordner "programme" als datei angezeigt. warum?



  • ka. ohne source code ist das sehr schwer, wenn nicht gar unmöglich nachzuvollziehen...



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • #define _WIN32_WINNT 0x0501
    
    #include <windows.h>
    #include <string.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
       WIN32_FIND_DATA FindFileData;
       HANDLE hFind = INVALID_HANDLE_VALUE;
       char DirSpec[MAX_PATH + 1];  // directory specification
       DWORD dwError;
    
       printf ("Target directory is %s.\n", argv[1]);
       strncpy (DirSpec, argv[1], strlen(argv[1])+1);
       strncat (DirSpec, "\\*", 3);
    
       hFind = FindFirstFile(DirSpec, &FindFileData);
    
       if (hFind == INVALID_HANDLE_VALUE)
       {
          printf ("Invalid file handle. Error is %u\n", GetLastError());
          return (-1);
       }
    
       else
       {
           while (FindNextFile(hFind, &FindFileData) != 0)
           {
               if( FindFileData.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY )
               {
                   cout << "Directory: " << FindFileData.cFileName << "\n";
               }
               else
               {
                   cout << "File: " << FindFileData.cFileName << "\n";
               }
    
           }
          dwError = GetLastError();
          FindClose(hFind);
          if (dwError != ERROR_NO_MORE_FILES)
          {
             printf ("FindNextFile error. Error is %u\n", dwError);
             return (-1);
          }
       }
       return 0;
    }
    

    Das ist das gemeinte Programm. Ab und zu werden dort Ordner als Dateien angegeben oder habe ich etwas nicht berücksichtigt?



  • terites--; schrieb:

    oder habe ich etwas nicht berücksichtigt?

    Hast du. Die Dateiattribute sind Flags, die miteinander kombiniert werden können. Es reicht also nicht aus, auf Gleichheit mit FILE_ATTRIBUTE_DIRECTORY zu prüfen, denn damit erreichst du nur die Verzeichnisse, bei denen kein anderes Flag gesetzt ist.

    Formulier die Prüfung so:

    if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
    


  • ok verständlich aber was genau heißt das jetzt in logiksprache?

    if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )

    & ist ja kein && also was sagt das dem compiler?



  • Hallo

    das einfache & ist eine Bitoperation, genauer gesagt ein binäres AND.

    In deinem Fall wird geprüft, ob die Bits die in FILE_ATTRIBUTE_DIRECTORY auf 1 stehen (und das ist genau eins), auch in FindFileData.dwFileAttributes gesetzt sind.

    bis bald
    akari


Anmelden zum Antworten