Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » datei kopieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
12.11.2003, 13:43 Uhr
0xdeadbeef
Gott
(Operator)



C++:
void fcopy(FILE *from, FILE *to) {
  char buffer[256];
  int read = fread(buffer, sizeof(char), 256, from);
  while(read != 0) {
    fwrite(buffer, sizeof(char), read, to);
    fread(buffer, sizeof(char), 256, from);
  }
}


Wenn dabei ein Fehler auftritt, wird der failstate des entsprechenden Streams gesetzt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
12.11.2003, 13:57 Uhr
geissbock



@ ao

schon mal in der hilfe nach copyfile suchen lassen? also ich bekomme nur ausgaben für basic. deswegen hatte ich ja vorhin auch gefragt ob das nicht basic ist. aber das was für c ausgegeben wird bringt mich nicht weiter. ich suche erst selber ob ich das gelöst bekomme. aber da ich nicht gefunden hab über die benutzung frage ich lieber mal. weil es gibt keine blöden fragen nur blöde antworten. so kenne ich das. oder wer nicht fragt ist blöd. und was soll denn der sinn des forums den sein wenn ich nicht über die benutzung der syntax ein paar fragen stellen kann.

@0xdeadbeef

thx. das ist ja das was ich schon hatte. wollte wissen ob es noch ne möglichkeit gibt außer zeile für zeile zu lesen. weil bei langen dateien ist es dann schon wieder eine zeitfrage.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
12.11.2003, 14:03 Uhr
virtual
Sexiest Bit alive
(Operator)


Meine Gedanken dazu sind:

C++:
#include <stdio.h>
#include <stdlib.h> /* Required for demo program only */

/** filecopy
* Copies <source> to <target>
* @param   <source>    Name of the source file
* @param   <target>    Name of the target file
* @return  0, if succeed, any other return code signs an error:
*          -1: <source> cannot be opened
*          -2: <target> cannot be opened
*          -3: Failed to read from <source>
*          -4: Failed to write to <target>
*/

int filecopy(
    const char* source,
    const char* target)
{
    int ret = 0;
    char buffer[8192];
    FILE* s = NULL;
    FILE* t = NULL;
    size_t len;

    /*
     * Open source
     */

    s = fopen(source, "rb");
    if (NULL == s)
    {
        return -1;
    }

    /*
     * Open target
     */

    t = fopen(target, "wb");
    if (NULL == t)
    {
        fclose(s);
        return -2;
    }

    /*
     * Turn off buffering to avoid useless copying
     * (our buffer is large enough)
     */

    setbuf(s, NULL);
    setbuf(t, NULL);

    /*
     * Loop to copy file
     */

    do
    {
        /*
         * Read next portion
         */

        len = fread(buffer, 1, sizeof(buffer), s);
        if (sizeof(buffer)!=len && !feof(s))
        {
            ret = -3;
            break;
        }

        /*
         * Write the fetched portion
         */

        if (0 < len)
        {
            if (len != fwrite(buffer, 1, len, t))
            {
                ret = -4;
                break;
            }
        }
    } while (sizeof(buffer)==len);

    /*
     * Close the files
     */

    fclose(t);
    fclose(s);

    /*
     * Remove target, if an error took place
     */

    if (0 != ret)
    {
        remove(target);
    }

    return ret;
}


/** Demo
* A poor mans copy that copies a file to an other.
*/

int main(
    int argc,
    char** argv)
{
    int fc_ret;

    /*
     * Check command line
     */

    if (argc != 3)
    {
        fprintf(stderr,
                "error: %s: bad commad line.\n"
                "usage: %s <source> <target>\n",
                *argv,
                *argv);
        exit(EXIT_FAILURE);
    }

    /*
     * Copy files
     */

    fc_ret = filecopy(argv[1], argv[2]);
    if (0 != fc_ret)
    {
        fprintf(stderr,
                "error: %s: cannot copy %s to %s: ",
                argv[0],
                argv[1],
                argv[2]);

        switch (fc_ret)
        {
        case -1:
            fprintf(stderr,
                    "cannot open %s for reading.\n",
                    argv[1]);
            break;
        case -2:
            fprintf(stderr,
                    "cannot open %s for writing.\n",
                    argv[2]);
            break;
        case -3:
            fprintf(stderr,
                    "cannot read from %s.\n",
                    argv[1]);
            break;
        case -4:
            fprintf(stderr,
                    "cannot write to %s.\n",
                    argv[2]);
            break;
        default:
            fprintf(stderr,
                    "unknown error.\n");
            break;
        }
        exit(EXIT_FAILURE);
    }

    return EXIT_SUCCESS;
}


Durch ausschalten des Bufferings sollte sich das 3 Malige Kopieren auf 1 Mal reduzieren lassen...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
12.11.2003, 14:09 Uhr
geissbock



thx vitual. einige fehler hatte ich noch nicht beachtet.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
13.11.2003, 10:54 Uhr
ao

(Operator)



Zitat:
geissbock postete
schon mal in der hilfe nach copyfile suchen lassen?


Ja, bei mir geht das. Daher meine Vermutung, dass bei dir die Library nicht richtig oder nicht vollständig installiert ist.

Zitat:

.. weil es gibt keine blöden fragen nur blöde antworten.


Du stellst (nicht nur in diesem Thread) immer wieder Fragen, die in anderen Foren mit "Read the f***ing manual" beantwortet würden, z.B. hast du dir die Aufrufe von fstat und filelength und so erklären lassen. Normalerweise kann man so was schneller selbst finden als sich übers Internet von anderen Leuten beantworten lassen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
13.11.2003, 11:06 Uhr
geissbock



@ao

wie gesagt, ich versuche eigentlich immer erst die sachen selber zu lösen. weil so ist der lerneffekt um einiges höher. aber wenn ich nicht weiterkomme oder ich nichts finde frag ich hier lieber nach. weil ich in diesem forum schnelle und gute antworten bekomme.
mitlerweile bin ich auch so weit das ich anderen fragen beantworten kann. und diese sind aber auch nicht sonderlich schwierig. da kann man auch antworten im netz oder in der hilfe finden. aber mich freut es wenn man anderen weiterhelfen kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
13.11.2003, 13:19 Uhr
ao

(Operator)



Zitat:
geissbock postete
wie gesagt, ich versuche eigentlich immer erst die sachen selber zu lösen. weil so ist der lerneffekt um einiges höher.

Das ist auch die richtige Einstellung.

Zitat:
aber wenn ich nicht weiterkomme oder ich nichts finde frag ich hier lieber nach.

Das ist auch in Ordnung. Aber wenn du immer wieder zu Standard-C- oder WinAPI-Funktionen nichts findest, solltest du mal untersuchen, warum das so ist. Die MSDN-Lib enthält Informationen zu all diesen Themen, und zwar so aufbereitet mit Inhalt, Querverweisen und Suchfunktion, wie das hier im Forum niemand kann. Sie ist für alles, was Windows-Entwicklung betrifft, erste Wahl.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: