Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Κωδικας για αναζητηση αρχειων στο δισκο

Îåêßíçóå áðü ôï ìÝëïò NGF. Τελευταία δημοσίευση από το μέλος NGF στις 05-11-2007, 22:28. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  30-10-2007, 21:48 36806

    Κωδικας για αναζητηση αρχειων στο δισκο

    Γεια σας! Προσπαθω να γραψω κωδικα ωστε να κανω αναζητηση αρχειων σε καποιο φακελο στο δισκο οπως επισης και στους υποφακελους κτλ. Εχω τον παρακατω κωδικα:

    #define _WIN32_WINNT 0x0501

    #include <Windows.h>

    #include <iostream>

    #include <string>

    using namespace std;

    int SearchDir( string directory );

    int main(int argc, TCHAR *argv[])

    {

    SearchDir( "E:" );

    }

    int SearchDir( string directory )

    {

    //int x = 0;

    WIN32_FIND_DATA FindData;

    HANDLE hFind = INVALID_HANDLE_VALUE;

    string scan = directory + "//*";;

    hFind = FindFirstFile( scan.c_str(), &FindData );

    if ( hFind == INVALID_HANDLE_VALUE )

    {

    return 1;

    }

     

     

    if ( FindData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )

    {

     

    string dirscan;

    dirscan = directory + "//" + FindData.cFileName;

    SearchDir( dirscan );

    }

    else

    {

    cout << FindData.cFileName << endl;

    }

     

    //cout << FindData.cFileName << endl;

    //x++;

    while ( FindNextFile( hFind, &FindData ) != 0 )

    {

     

    if ( FindData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )

    {

    string dirscan;

    dirscan = directory + "//" + FindData.cFileName;

    SearchDir( dirscan );

    }

    else

    {

    cout << FindData.cFileName << endl;

    }

     

    //cout << FindData.cFileName << endl;

    //x++;

    }

     

    FindClose( hFind );

    cout << "========Finished========" << endl;

    //cout << x << endl;

    system ( "pause" );

    return 0;

    }

    Εαν βγαλω τον κωδικα που τσεκαρει για φακελους ολα λειτουργουν κανονικα. Οταν μπαινει στον παιχνιδι και ο κωδικας αυτος ομως τοτε βγαζει οτι θελει και οπως θελει. Επειδη δεν μπορω να εξηγησω ετσι και μια εικονα = χιλιες λεξεις δοκιμασε να τρεξετε τον κωδικα και θα δειτε τι ακριβως εννοω.


    Burning The Fire........
  •  30-10-2007, 21:56 36807 σε απάντηση της 36806

    Απ: Κωδικας για αναζητηση αρχειων στο δισκο

    Ανάμεσα στους καταλόγους που σου επιστρέφει η FindFirstFile/FindNextFile είναι και οι "." (τρέχων) και ".." (γονικός). Αφού δεν ελέγχεις γι' αυτούς, το πρόγραμμά σου θα πέσει σε άπειρο loop.

    Επίσης είναι καλύτερο να χρησιμοποιήσεις ένα do { ... } while (FileNextFile) αντί να έχεις τον ίδιο κώδικα copy - paste δύο φορές.


    Νατάσα Μανουσοπούλου
  •  30-10-2007, 22:47 36810 σε απάντηση της 36807

    Απ: Κωδικας για αναζητηση αρχειων στο δισκο

    Δηλαδη ενα παραδειγμα πως θα γραψω τον κωδικα σχετικα με το κομματι των φακελων (".", ".."). Δεν καταλαβα πως θα το χρησιμοποιησω αυτο στον κωδικα μου


    Burning The Fire........
  •  05-11-2007, 22:28 36973 σε απάντηση της 36810

    Απ: Κωδικας για αναζητηση αρχειων στο δισκο

    Εκανα καποιες αλλαγες στην SearchDir :

     

    int SearchDir( string directory )

    {

    int x = 0;

    WIN32_FIND_DATA FindData;

    HANDLE hFind = INVALID_HANDLE_VALUE;

    string scan = directory + "\\*.*";;

    hFind = FindFirstFile( scan.c_str(), &FindData );

    if ( hFind == INVALID_HANDLE_VALUE )

    {

    return 1;

    }

    do

    {

     

    if ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )

    {

    string tempfile = FindData.cFileName;

    if ( tempfile != "." && tempfile != ".." )

    {

     

    string dirscan;

    dirscan = directory + "\\" + FindData.cFileName;

    SearchDir( dirscan );

    }

    }

    else

    {

    cout << FindData.cFileName << endl;

    x++;

    }

     

    }

    while ( FindNextFile( hFind, &FindData ) != 0 );

     

     

    FindClose( hFind );

    cout << "========Finished========" << endl;

    //cout << x << endl;

     

    return 0;

    }

    Και αν τρεξετε των κωδικα θα δειτε οτι παλι δεν πανε ολα οπως επρεπε. Και πρωτα απο ολα ενω θα επρεπε να πηγαινε στο FindClose οταν τελειωσει το loop, φαινεται να βγαινει απο το loop καθε τοσο και δεν μπορω να καταλαβω γιατι. Please help! Και συγνωμη αν σας κουρασα


    Burning The Fire........
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems