Leere Ausgabedatei mit Fread, Fwrite Funktion



  • Hallo,

    Ich hab ein Problem mit der fread / fwrite Funktion.
    Vielleicht kann mir ja einer helfen 😉
    Es funktioniert soweit alles. Das einzige was mich wundert ist,
    dass nichts in die Ausgabedatei geschrieben wird. 😕
    Das Programm nutzt jeweils eine Quelldatei mit Wörtern und gibt dann eine Kopie der Quelldatei aus. Es verwendet den binären Modus. Ich möchte auch gerne den binären Modus für die Textdatei verwenden.
    Ich programmiere in C und kompiliere mit Dev-c++.
    Außerdem nutze ich die commandlines unter DOS.

    Hier ist mein code

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>

    #define MAX 100

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

    {

    size_t bytes;
    char ch;
    int i = 0;
    FILE *in, *out;
    char filename[MAX];
    static char buffer [MAX];

    if (argc < 2 || argc > 3)
    {
    fprintf(stderr, "Too few arguments or too many arguments\nPlease type in a source file and a name for the copy file\nExample: [source name.txt] [copy name]");
    exit(EXIT_FAILURE);
    }

    if ((in = fopen(argv[1], "rb")) == NULL)
    {
    fprintf(stderr, "Couln't open File %s", argv[1]);
    exit(EXIT_FAILURE);
    }

    strncpy(filename, argv[2], MAX - 13);
    filename [MAX - 13] = '\0';
    strcat(filename, ".numb");

    if ((out = fopen(filename, "wb")) == NULL)
    {
    fprintf(stderr, "Couldn't open output file %s", argv[2]);
    exit (EXIT_FAILURE);
    }

    puts("File successfully created");
    printf("Processing output please wait");

    for (i = 0 ;i < 3; i++)
    printf(".");

    if (setvbuf(in, NULL, _IOLBF, MAX) != 0)

    {
    fputs("Can't create input buffer\n",stderr);
    exit(EXIT_FAILURE);
    }

    if (setvbuf(out, NULL, _IOLBF, MAX) != 0)

    {
    fprintf(stderr, "Can't create output buffer\n");
    exit(EXIT_FAILURE);
    }

    while ((bytes = fread(&buffer, sizeof(char), MAX, in)) > 0);
    {

    if ((ferror(in)) != 0)
    {
    fprintf(stderr, "A read error has occured!");
    exit(EXIT_FAILURE);
    }

    fwrite(&buffer, sizeof(char), bytes, out);

    if ((ferror(out)) != 0)
    {
    fprintf(stderr, "A write error has occured!");
    exit(EXIT_FAILURE);
    }

    }
    printf("\n%d words successfully read and write\n", bytes);

    fclose (in);
    fclose (out);

    printf("Done");

    return 0;

    }

    Hoffe es kann mir einer helfen, hab echt keine ahnung was falsch ist 😞 .



  • 1. Nutze die cpp Tags. Dann kann man deinen Code auch lesen.
    Code markieren und mit der Maus auf den Button/Kasten [C/C++] unter den 🙂 😃 😉 drücken.
    Als Mitglied kannst du das immer noch editieren.

    2. Der Schleifenkörper deiner while ((bytes = fread(&buffer, sizeof(char), MAX, in)) > 0); ist durch das Semikolon am Ende sehr, sehr kurz.



  • [quote="DirkB"]1. Nutze die cpp Tags. Dann kann man deinen Code auch lesen.
    Code markieren und mit der Maus auf den Button/Kasten [C/C++] unter den 🙂 😃 😉 drücken.
    Als Mitglied kannst du das immer noch editieren.

    2. Der Schleifenkörper deiner while ((bytes = fread(&buffer, sizeof(char), MAX, in)) > 0); ist durch das Semikolon am Ende sehr, sehr kurz.[/quote]

    Hey danke, funktioniert! 😃 Immer diese Semikolons, die sich
    einschleichen. Hab das vollkommen übersehen.

    Werd mir das mit den cpp tags merken 😉



  • Cheerful Coder schrieb:

    fprintf(stderr, "Couln't open File %s", argv[1]);

    Deutsche Sprache schwere Sprache, und das Ausweichen auf Englisch scheint auch nicht ganz geglückt.

    &buffer
    

    Ist undefiniertes Verhalten, buffer ist schon ein Array.

    Die Verwendung von so aussagekräftigen Namen wie "MAX" ist auch eher suboptimal, schon mal darüber nachgedacht, ob nicht vielleicht die Standardbibliothek diesen Namen schon verwendet?



  • [quote="Wutz"][quote="Cheerful Coder"]
    fprintf(stderr, "Couln't open File %s", argv[1]);
    [/quote]
    Deutsche Sprache schwere Sprache, und das Ausweichen auf Englisch scheint auch nicht ganz geglückt.

    &buffer
    

    Ist undefiniertes Verhalten, buffer ist schon ein Array.

    Die Verwendung von so aussagekräftigen Namen wie "MAX" ist auch eher suboptimal, schon mal darüber nachgedacht, ob nicht vielleicht die Standardbibliothek diesen Namen schon verwendet?[/quote]

    Danke für den Hinweis, werde es berücksichtigen. 🙂


Log in to reply