Festplatte durchsuchen



  • Hi @ All.

    ich habe ein Suchstring TCHAR search[MAX_PATH] und nach diesem soll ein verzeichnis / platte mit underverzeichnissen durchsucht werden.
    der string soll nur in den dateinamen / ordnern vorkommen.

    danke.



  • WIN32_FIND_DATA w32Find;
    
    //erst
    HANDLE hFile = FindFirstFile("suchstring", &w32Find);//  (für "erste" datei) 
    
    //dann
    while(FindNextFile(hFile, &w32Find) //(für die weiteren dateien)
    
    //und wieder schließen
    FindClose(hFile);
    

    WIN32_FIND_DATA
    The WIN32_FIND_DATA structure describes a file found by the FindFirstFile, FindFirstFileEx, or FindNextFile function.

    typedef struct _WIN32_FIND_DATA { // wfd
    DWORD dwFileAttributes;
    FILETIME ftCreationTime;
    FILETIME ftLastAccessTime;
    FILETIME ftLastWriteTime;
    DWORD nFileSizeHigh;
    DWORD nFileSizeLow;
    DWORD dwReserved0;
    DWORD dwReserved1;
    TCHAR cFileName[ MAX_PATH ];
    TCHAR cAlternateFileName[ 14 ];
    } WIN32_FIND_DATA;

    Members
    dwFileAttributes
    Specifies the file attributes of the file found. This member can be one or more of the following values: Attribute Meaning

    FILE_ATTRIBUTE_ARCHIVE The file or directory is an archive file or directory. Applications use this attribute to mark files for backup or removal.

    FILE_ATTRIBUTE_COMPRESSED The file or directory is compressed. For a file, this means that all of the data in the file is compressed. For a directory, this means that compression is the default for newly created files and subdirectories.

    FILE_ATTRIBUTE_DIRECTORY The handle identifies a directory.

    FILE_ATTRIBUTE_ENCRYPTED The file or directory is encrypted. For a file, this means that all data streams are encrypted. For a directory, this means that encryption is the default for newly created files and subdirectories.

    FILE_ATTRIBUTE_HIDDEN The file or directory is hidden. It is not included in an ordinary directory listing.

    FILE_ATTRIBUTE_NORMAL The file or directory has no other attributes set. This attribute is valid only if used alone.

    FILE_ATTRIBUTE_OFFLINE The file data is not immediately available. Indicates that the file data has been physically moved to offline storage.

    FILE_ATTRIBUTE_READONLY The file or directory is read-only. Applications can read the file but cannot write to it or delete it. In the case of a directory, applications cannot delete it.

    FILE_ATTRIBUTE_REPARSE_POINT The file has an associated reparse point.

    FILE_ATTRIBUTE_SPARSE_FILE The file is a sparse file.

    FILE_ATTRIBUTE_SYSTEM The file or directory is part of the operating system or is used exclusively by the operating system.

    FILE_ATTRIBUTE_TEMPORARY The file is being used for temporary storage. File systems attempt to keep all of the data in memory for quicker access, rather than flushing it back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed.

    ftCreationTime
    Specifies a FILETIME structure containing the time the file was created. FindFirstFile and FindNextFile report file times in Coordinated Universal Time (UTC) format. These functions set the FILETIME members to zero if the file system containing the file does not support this time member. You can use the

    FileTimeToLocalFileTime function to convert from UTC to local time, and then use the FileTimeToSystemTime function to convert the local time to a SYSTEMTIME structure containing individual members for the month, day, year, weekday, hour, minute, second, and millisecond.

    ftLastAccessTime
    Specifies a FILETIME structure containing the time that the file was last accessed. The time is in UTC format; the FILETIME members are zero if the file system does not support this time member.

    ftLastWriteTime
    Specifies a FILETIME structure containing the time that the file was last written to. The time is in UTC format; the FILETIME members are zero if the file system does not support this time member.

    nFileSizeHigh
    Specifies the high-order DWORD value of the file size, in bytes. This value is zero unless the file size is greater than MAXDWORD. The size of the file is equal to (nFileSizeHigh * MAXDWORD) + nFileSizeLow.

    nFileSizeLow
    Specifies the low-order DWORD value of the file size, in bytes.

    dwReserved0
    If the dwFileAttributes member includes the FILE_ATTRIBUTE_REPARSE_POINT attribute, this member specifies the reparse tag. Otherwise, this value is undefined and should not be used.

    dwReserved1
    Reserved for future use.

    cFileName
    A null-terminated string that is the name of the file.

    cAlternateFileName
    A null-terminated string that is an alternative name for the file. This name is in the classic 8.3 (filename.ext) filename format.

    Remarks
    If a file has a long filename, the complete name appears in the cFileName field, and the 8.3 format truncated version of the name appears in the cAlternateFileName field. Otherwise, cAlternateFileName is empty. As an alternative, you can use the GetShortPathName function to find the 8.3 format version of a filename.



  • http://msdn2.microsoft.com/en-US/library/aa365527.aspx

    Damit kannst du nach einer Datei in einem Verzeichnis suchen.

    Zwei Links, die du scheinbar nicht kennst, die dir aber generell weiterhelfen könnten:
    http://msdn2.microsoft.com/en-us/library/default.aspx
    http://www.google.de

    gruß
    Martin



  • http://msdn2.microsoft.com/en-US/library/aa365527.aspx

    Ach du kacke!
    was soll ich mit dem lpFilePart machen? und wie suche ich mehrere Dateien. der gibt ja immer nur eine aus.
    könntet ihr mir bitte ein Beispiel geben?
    und wenn ich nur dateien suchen möchte, die eine bestimmte endung haben , was mache ich dann? setze ich den lpFileName auf NULL?
    thx1



  • habt ihr ein beispiel dazu?
    bidde... ich find bei google nix.

    // Also dass geht net:

    LPCSTR lpPath = "C:\\";
    	LPCSTR lpFileName = "boot";
    	LPCSTR lpExtension = NULL;
    
    	LPSTR lpBuffer;
    	LPSTR lpFilePart;
    
    	SearchPath(lpPath,lpFileName,lpExtension,MAX_PATH+1,lpBuffer,&lpFilePart);
    
    	MessageBox(NULL,lpBuffer,"title",MB_OK);
    

    warum?
    thx.



  • weil Du entweder die Extension mit ".ini" angeben musst, oder Du setzt
    den Filenamen auf "boot.ini".
    Oder existiert bei Dir eine Datei die einfach nur "boot" heiss`???



  • nee, die existiert nicht.

    aber angenommen ich habe lpSearch, der suchstring.
    dann eine While, die so lange aufgerufen wird, wie viele dateien halt gefunden wurden. dann kann ich das auswerten und auf dem Monitor darstellen.
    wie mache ich das?
    thx.



  • in der Console entweder mit

    printf
    

    [ C ] oder

    cout
    

    [C++ ]
    oder in einer GUI schickste das ganze gefundene Zeugs per

    SendMessage
    

    an ne Editbox
    Oder willst du sowas haben wie in der Windows Suche?



  • thx... das weiß ich schon.
    aber wie kann ich suchen?
    daten präsentieren .. ok
    suchen ..
    ja.



  • Leute?
    wie geht das nun mit einem Suchstring und Pfad??
    aber ich möchte mehrere Dateien finden können...
    thx!



  • FindNextFile?



  • Wieso FindNextFile???
    der sucht doch nur in einem Ordner, und nicht im Unterordner.
    oder soll ich ein Algorythmus schreiben, der dann ordner für ordner aufklappt und sucht???
    und das dauert und dauert...
    thx.



  • was dauert und dauert? den Algorithmus schreiben oder das Suchen?

    Nur so als Randbemerkung:
    Dieses Forum ist nicht dazu da dir deine Programme/Algorithmen zu schreiben bzw. für dich nach ihnen zu googlen oder die MSDN zu durchwühlen!
    Bei Problemen und Fragen wird gerne geholfen, aber ausnutzen lassen will sich hier keiner.



  • Wenn Du endlich mal Dein (nicht vorhandenes?) Gehirn aktivieren würdest, um beispielsweise auch mal die Suchfunktion dieses Forums zu bemühen, wärst Du vllt. auf das gestoßen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-168044-and-highlight-is-*rekursiv*.html (wie man sieht: alles Konjunktiv... 🙄 ). Ich finde Dein Verhalten irgendwie etwas dreißt 👎 .



  • naja, dass kann ich schon verstehen.
    aber ich habe gesucht. vielleicht such ich ja falsch, aber dennoch.


Anmelden zum Antworten