Wie kann man den Dateinamen beim Schreiben in einer Schleife dynamisch ändern?

Lesezeit: 2 Minuten

Benutzer-Avatar
Richard Knopf

Ich würde gerne so etwas machen: In einer Schleife schreibe die erste Iteration etwas Inhalt in eine Datei namens file0.txt, die zweite Iteration file1.txt und so weiter, erhöhe einfach die Zahl.

FILE *img;
int k = 0;
while (true)
{
            // here we get some data into variable data

    file = fopen("file.txt", "wb");
    fwrite (data, 1, strlen(data) , file);
    fclose(file );

    k++;

            // here we check some condition so we can return from the loop
}

int k = 0;
while (true)
{
    char buffer[32]; // The filename buffer.
    // Put "file" then k then ".txt" in to filename.
    snprintf(buffer, sizeof(char) * 32, "file%i.txt", k);

    // here we get some data into variable data

    file = fopen(buffer, "wb");
    fwrite (data, 1, strlen(data) , file);
    fclose(file );

    k++;

    // here we check some condition so we can return from the loop
}

Anders in C++:

#include <iostream>
#include <fstream>
#include <sstream>

int main()
{
    std::string someData = "this is some data that'll get written to each file";
    int k = 0;
    while(true)
    {
        // Formulate the filename
        std::ostringstream fn;
        fn << "file" << k << ".txt";

        // Open and write to the file
        std::ofstream out(fn.str().c_str(),std::ios_base::binary);
        out.write(&someData[0],someData.size());

        ++k;
    }
}

FILE *img;
int k = 0;
while (true)
{
    // here we get some data into variable data
    char filename[64];
    sprintf (filename, "file%d.txt", k);

    file = fopen(filename, "wb");
    fwrite (data, 1, strlen(data) , file);
    fclose(file );
    k++;

            // here we check some condition so we can return from the loop
}

Erstellen Sie also den Dateinamen mit sprintf:

char filename[16]; 
sprintf( filename, "file%d.txt", k );  
file = fopen( filename, "wb" ); ...

(obwohl das eine C-Lösung ist, also ist das Tag nicht korrekt)

Benutzer-Avatar
Josh Wieder

Ich habe dies auf die folgende Weise erreicht. Beachten Sie, dass dies im Gegensatz zu einigen anderen Beispielen tatsächlich wie beabsichtigt kompiliert und funktioniert, ohne dass neben den Präprozessor-Includes Änderungen vorgenommen werden müssen. Die folgende Lösung iteriert fünfzig Dateinamen.

int main(void)
{
    for (int k = 0; k < 50; k++)
    {
        char title[8];
        sprintf(title, "%d.txt", k);
        FILE* img = fopen(title, "a");
        char* data = "Write this down";
        fwrite (data, 1, strlen(data) , img);
        fclose(img);
    }
}

  • Sie meinen 51 Namen: 0 und 50 zählen jeweils als ein Name (nicht sicher, welchen Sie vergessen haben). Sie können dies schnell erkennen, indem Sie feststellen, dass es von 0 bis 10 (< 11) tatsächlich 11 Namen gibt.

    – wahnsinnig

    28. März 2015 um 10:16 Uhr

  • Sie meinen 51 Namen: 0 und 50 zählen jeweils als ein Name (nicht sicher, welchen Sie vergessen haben). Sie können dies schnell erkennen, indem Sie feststellen, dass es von 0 bis 10 (< 11) tatsächlich 11 Namen gibt.

    – wahnsinnig

    28. März 2015 um 10:16 Uhr

1124730cookie-checkWie kann man den Dateinamen beim Schreiben in einer Schleife dynamisch ändern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy