Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

1

11.07.2006, 16:36

Brett vor dem Kopf - fstream

habe folgendes Problem:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
    std::basic_ifstream<char> ifF;
    std::basic_ofstream<char> ofF;

    ifF.open("test.txt");
    ofF.open("test2.txt");

    while(!ifF.eof())
    {
        char ch;
        ifF.read(&ch, sizeof(ch));
        ofF<<ch;
    }

    ifF.close();
    ofF.close();

    std::cin.get();
    return 0;
}

folgende Ausgabe:

test.txt: "Hallo du"
test2.txt: "Hallo duu"

wieso der letzte Buchstabe?
Was es alles gibt, das ich nich brauche - Aristoteles

2

11.07.2006, 16:50

hm, das kann ich dir nich sagen, aber versuch mal (ich übernehm keine haftung :D ):

ofF << ifF;

ich glaube, das geht sogar---

edit:
oder wars

ofF << ifF.rdbuf();

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

3

11.07.2006, 16:58

naja ziel ist es jegliche art und auch teile einer datei hinundher zu kopieren, deswegen brauche ich read write. Das Problem ist glaube ich das eof zeichen, weißt du wie es definiert ist?
Was es alles gibt, das ich nich brauche - Aristoteles

4

11.07.2006, 17:26

also ich habs grad mal ausprobiert...
ich kann noch nich genau sagen, woran es liegt, aber s is so:
die letzte lese-operation schlägt fehl.
Da du in der schleife den char immer wieder anlegst, behält der praktisch den letzten wert, da der immer an der selben speicherstelle angelegt wird.
(also das "u")
die leseoperation verändert den char nich und damit schreibste nochma das char in die file...

ofF << ifF.rdbuf() funktioniert einwandfrei (kopiert halt die ganze file)

kannst auch alternativ die filegröße bestimmen, und halt nur soviel (gepuffert) in die andere file schreiben...

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

5

11.07.2006, 18:01

Mach doch einfach in gedanken die beiden letzten Durchläufe durch die Schleife (Er zeigt auf das "u" - also ist eof falsch - er liest also das "u" - der Zusatnd der Datei ist immer noch "nicht eof" etc ;)

Tip: Also die etwas einfachere (aber nicht superschnelle) Methode ist es, vor dem schreiben noch eine if-Abfrage zu haben.
"Games are algorithmic entertainment."

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

6

11.07.2006, 18:11

mache es jetzt so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    std::basic_ifstream<char> ifF;
    std::basic_ofstream<char> ofF;

    ifF.open("test.txt");
    ofF.open("test2.txt");
    
    char ch;

    while(ifF.read(&ch, sizeof(ch)))
        ofF.write(&ch, sizeof(ch));

    ifF.close();
    ofF.close();

    std::cin.get();
    return 0;
}
Was es alles gibt, das ich nich brauche - Aristoteles

Anonymous

unregistriert

7

11.07.2006, 19:12

Zum Dateikopieren: CopyFile --> MSDN

oder wenn es Streams sein sollen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
// Quelldatei 

ifstream FileInCopy("c:/test.txt"); 

// Zieldatei 

ofstream FileOutCopy("c:/test2.txt"); 

if (FileInCopy) 
    FileOutCopy << FileInCopy.rdbuf();

CW_Kovok

Alter Hase

  • »CW_Kovok« ist der Autor dieses Themas

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

8

11.07.2006, 19:15

jepp bei ganzen dateien, ich will aber teile auslesen, da komme ich leider nich drum herum, ansonsten danke für die hilfe jetzt funktioniert alles
Was es alles gibt, das ich nich brauche - Aristoteles

9

13.07.2006, 21:13

Ich benutze immer FILE mit fread und fwrite. Habe vorher auch die Streams genommen, fand die FILE Sache aber dann doch einfacher.
Oder haben die Streams irgendwelche unbekannten Vorteile oder ist es einfach "Geschmackssache"?

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

10

13.07.2006, 21:15

fstream => C++
FILE => C

ReadFile(...) => WinAPI

Die Systembefehle, also direkt von Windows sind sicherer und meist auch etwas schnellerer, wobei ich das aber noch nicht gestestet habe (Vermutung, da logisch ;) )

p.s. "leidender Schüler" *gg* Das ist ein Widerspruch in sich ;)

Werbeanzeige