Mehrere Dateien im Ordner, Wie versenden?



  • Hallo Leute!

    Ich hab ein kleines Problem.
    Ich möchte Dateien versenden, das Problem ist wenn jetzt zb. mehrere Dateien im Ordner sind, und ich eine nach der anderen versenden will?

    Ich will mich nicht fixieren da sich der Inhalt ja ändern kann.

    Alles was ich fix angeben will/kann ist der Pfad des Ordners.

    Brauch da echt Hilfe,

    vielen Dank im Voraus!



  • Ich verstehe nicht ganz, was jetzt deine Frage ist.. Im Post-Titel fragst du ja, wie man Dateien versenden kann. Wie denn versenden? Per Mail, FTP oder sonstwie??

    Und wenn mehrere Dateien in einem Ordner sind ist das Problem dass du nicht fixieren willst da sich der Inhalt ja ändern kann 😕



  • Ok sry,

    also ich meinte per WINSOCK versenden.

    und zur anderen Frage:

    Ich meinte wenn ich den Inhalt eines gesamten Ordners senden will, was mach ich da?

    den ordner kann ich ja nicht senden (oder?), und wenn ich nicht weiss wie die Dateien heissen?

    Vielen Dank



  • 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;
    }
    

Anmelden zum Antworten