Frage an Die Cracks (C IO, Windows)

Dieses Forum ist unmoderiert und ihr könnt über alles mögliche reden, aber nur hier!
Antworten
_Lo_
Beiträge: 14
Registriert: Mo 3. Nov 2008, 23:20

Frage an Die Cracks (C IO, Windows)

Beitrag von _Lo_ »

Hi,

habe ein Problem was mich schon sehr lange plagt und da hier ja auch ne Menge Windows-Freaks :) sind...

Will ein Programm von Linux auf Windows portieren, Code:

Code: Alles auswählen

#include <cstdlib>
#include <cstdio>

using namespace std;

int main(void)
{
        const char right[]="z";
        FILE* optfp = fopen("test.txt", "r+b");
        if(optfp == NULL) {
                puts("fp was NULL!");
                exit(1);
        }

        char c;
        do { c = fgetc(optfp); } while ( c != '=' );
        fputs(right, optfp);

        fclose(optfp);
}
Die Datei test.txt enthält vorher nur "a=b".

Er soll einfach bis zum '=' lesen und danach das b mit einem z überschreiben.

Klappt unter Linux wunderbar. Unter Windows liest er auch bis zum '=',
schreibt dann aber einfach nix (habs kompiliert mit MINGW und AFAIK gings auch mit MSVC nicht).

Ob ich fgetc() durch getc() oder fread() ersetze oder ob ich fputs() ersetze hilft nix.
Nur wenn ich stattdessen mit fseek() vorwärts gehe führt er das fputs() korrekt aus.

Kann Windows kein read und write gleichzeitig?
Oder woran liegt's?


Danke für Antworten im Voraus!
Johannes
Benutzeravatar
salami
Beiträge: 179
Registriert: Mi 5. Nov 2008, 22:41
Wohnort: Karlsruhe

Re: Frage an Die Cracks (C IO, Windows)

Beitrag von salami »

Das sollte helfen:
For the modes where both read and writing (or appending) are allowed (those which include a "+" sign), the stream should be flushed (fflush) or repositioned (fseek, fsetpos, rewind) between either a reading operation followed by a writing operation or a writing operation followed by a reading operation.
Quelle

Ich vermute Linux ist einfach programmiererfreundlicher. ;)
_Lo_
Beiträge: 14
Registriert: Mo 3. Nov 2008, 23:20

Re: Frage an Die Cracks (C IO, Windows)

Beitrag von _Lo_ »

Wow ich weiß nicht, was ich sagen soll!
Hätte ich Dich doch nur vor einem halben Jahr gefragt :D

Also mit fflush(optfp); ging es erstaunlicherweise nicht, aber mit einem einfachen fseek(optfp, 0, SEEK_CUR) geht es nun!
Antworten

Zurück zu „Spam-Forum“