Mehrere Dateien im Ordner, Wie versenden?



  • FindFirstFile / FindNextFile / FindClose



  • Danke



  • K hab die Boardsuche verwendet und auch Bsp-Quellcodes gefunden.

    Hab auch im MSDN nachgesehen leider werde ich nicht schlau daraus(in Bezug auf die Frage wie ich die Daten versenden soll)

    Mit einem Beispielquellcode (nur wie ich die Dateien finde und sie lese) würdet ihr mir echt helfen.

    An der Uhrzeit des Posts lol merkt man auch, dass ich mich etwas länger daran probiert habe.

    Thx im Voraus



  • Jap, ist wohl deine Samstag-Nacht für draufgegangen 😃

    Das mit den Dateien suchen und auslesen ist aber einfacher als du dir denkst 😉 :

    std::string Directory = "C:\\IrgendeinOrdner";
    std::string WildcardPath = Directory + "\\*.*";
    
    WIN32_FIND_DATA FindData;
    HANDLE hFind = FindFirstFile( WildcardPath, &FindData );
    
    do
    {
        // Wir wollen ja keine Ordner, sondern nur Dateien
        if ( ! ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) )
        {
            // Datei auslesen (nur bis 4 GB, aber alles andere würde ja deinen Upload sprengen^^)
            std::string FileName = Directory + "\\" + FindData.cFileName;
            HANDLE hFile = CreateFile( FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
            if ( hFile != INVALID_HANDLE_VALUE )
            {
                DWORD FileSize = FindData.nFileSizeLow;
                char* pFileContent = new char [ FileSize ];
    
                DWORD BytesRead;
                ReadFile( hFile, pFileContent, FileSize, &BytesRead, NULL );
    
                // Datei versenden...
    
                delete [] pFileContent;
                CloseHandle( hFile );
            }
        }
    } while ( FindNextFile( hFind, &FindData );
    
    FindClose( hFind );
    

    Is aber ungetestet, können Fehlerchen drin sein, aber Prinzip sollte deutlich werden, ist ja Hauptsache 😉



  • es ist eher nicht empfehlenswert die ganze datei in den speicher zu laden.



  • Ach, wozu haben wir den heutzutage Rechner mit mehreren GB RAM 😃



  • Hallo

    ich denke ich habs in etwa verstanden danke, nur da ich noch wenig Kenntnis von der WinApi habe tu ich ma noch ein wenig schwer.

    Erm wird die Datei jetzt in bytesread geschrieben oder?

    da wird sie eh sowie bei fopen etc und nicht bitweise gelesen oder?



  • Aufjedenfall Danke für das tolle Beispiel.



  • Erm wird die Datei jetzt in bytesread geschrieben oder?

    Nein



  • lol eine kurze und treffende Antwort.

    Ok nur wo is dann der Zeiger auf die Datei?



  • ah ok sry sehs schon



  • Hallo, ich seh leider immer noch nicht wie man damit dann in ne File schreiben kann.



  • nemo70 schrieb:

    Hallo, ich seh leider immer noch nicht wie man damit dann in ne File schreiben kann.

    Es ging gar nicht darum, in eine Datei zu schreiben^^ Es ging nur darum, dass er mehrere Dateien in einem Ordner hatte, die alle auslesen und im Netzwerk verschicken wollte :).



  • Achso, kann mir jmd viell einen Bsp-Source zeigen?

    Wär ur wichtig, vielen dank!

    Es reicht schon wenn die Datei in nen Buffer (array) geschrieben wird.



  • Der Source steht auf der ersten Seite, da werden auch Dateien in einen Buffer gelesen.



  • in contentpfile?



  • contentpfile? Ne, der Dateiinhalt befindet sich dann in pFileContent...
    Hat irgendjemand schon geschrieben und hat Recht: Am besten keine Dateien über 5 MB einlesen, dann wird das ganze etwas ineffizient.

    HANDLE hFile = CreateFile( FileName /*Dein Dateiname*/, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
    if ( hFile != INVALID_HANDLE_VALUE )
    {
        DWORD FileSize = GetFileSize( hFile, NULL );
        char* pFileContent = new char [ FileSize ];
    
        DWORD BytesRead;
        ReadFile( hFile, pFileContent, FileSize, &BytesRead, NULL );
        CloseHandle( hFile );
    
        // Inhalt verarbeiten: Daten in pFileContent, Größe in FileSize.
    
        delete [] pFileContent;
    }
    


  • Wow echt vielen Dank, hier bekommt man echt immer tolle Hilfe 👍

    mfg



  • Hallo nur noch eins:

    Wenn ich jetzt zb. mit diesen Funktionen den Benutzernamen (zb C:\\Dokumente und Einstellungen\\nemo70) auselese

    kann ich den so ermittelten Pfad eig dann wo anders auch verwenden?

    zb. C:\(wenn ich zb den Benutzernamen erst ermitteln muss)\\Dokumente und Einstellungen\\ermittelter Benutzername\\etc?

    Danke



  • Klar, wenn du dir den Namen irgendwo speicherst, kannst du ihn auch in anderem Umfeld einsetzen:

    std::string name = getUserName();
    std::string user_path = "C:\\Dokumente und Einstellungen\\"+name+"\\";
    std::string desk_path = user_path+"Desktop\\";
    ...
    

Anmelden zum Antworten