KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: [C] Datei einlesen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

daniel133

hi Leute

Ich habe mal eine Frage in c:

Ich möchte gerne eine Datei lesen und den Inhalt wieder Schreiben.

Dazu habe ich einen Code gecodet, doch dieser ließt immer nur die 1 Zeile der Datei ein un schriebt diese :

Zitat:
Die #include werden leider nicht hier im Forum angezeigt.




#define printf pspDebugScreenPrintf

PSP_MODULE_INFO("Test",0,1,1);


int main(void) {
pspDebugScreenInit();
pspDebugScreenClear();
SetupCallbacks();
SceCtrlData pad;


FILE *datei;
char text[100+1];



datei = fopen ("ms0:/testdatei.txt", "r");
if (datei != NULL)
{
fscanf (datei, "%100c", text);

text[100] = '\0';

fclose (datei);
}



FILE *datei2;
datei2 = fopen ("ms0:/psp/testdatei.txt", "w");
if (datei2 == NULL)
{
printf("Fehler beim oeffnen der Datei.");
return 1;
}
fprintf (datei2, text);
fclose (datei2);





return 0;
}

Ich möchte nicht den Kopier befehl verwenden, sondern erst einlesen, dann wieder schreiben.

Wäre cool wenn mir jemand helfen könnte.


lg Daniel133

Hi Tongue
Ich glaube wenn du das so änderst,

Code:
fscanf (datei, "%s", text);


,sollte es gehen Big Grin

Ich würde dir aber trozdem eine andere Funktion ans Herz legen.
Schau dir mal das Beispiel an =)

Lies die Datei in einem Array ein und gib sie aus.

daniel133

kannst du mir dazu einen code schnipsle geben ?
Mach es halt nicht mit nem Array, sondern dynamisch...

Code:
int main(int argc, char *argv[])
{
    pspDebugScreenInit();
    pspDebugScreenClear();
    SetupCallbacks();
    SceCtrlData pad;
    
    /* Variablen, vor allem Zeiger, sollten vordefiniert werden! */
    FILE *datei = NULL, *datei2 = NULL;
    
    /* Zeiger auf einen dynamischen Speicherbereich, der später angefordert wird */
    char *text = NULL;
    
    /* Damit wir wissen wie viel Bytes geschrieben werden müssen */
    int size = 0;
    
    datei = fopen("ms0:/testdatei.txt", "r");
    if(datei)
    {
        /* Größe ermitteln */
        fseek(datei, 0L, SEEK_END);
        size = ftell(datei);
        fseek(datei, 0L, SEEK_SET);
        
        /* Speicher anfordern */
        text = (char *)malloc(size);
        if(!text)
            // ERROR
        
        /* Datei einlesen */
        fread(text, sizeof(char), size, datei);
        
        /* Bringt eigentlich hier gar nichts^^ */
        text[size - 1] = '\0';
        
        fclose(datei);
    };
    
    datei2 = fopen("ms0:/psp/testdatei.txt", "w");
    if(!datei2)
    {
        printf("Fehler beim oeffnen der Datei.");
        return 1;
    };
    
    /* In datei2 schreiben */
    fwrite(text, sizeof(char), size, datei2);
    fclose(datei2);
    
    // blaaaaaaaaaaaa
};


Ist nicht getestet, aber so in etwa sollte es funktionieren.
Außerdem würd ich dir raten, dir mal die PSP I/O Funktionen anzuschauen... ich finde die auf der PSP wesentlich schöner als die libc Funktionen Smile

BTW, bitte formatiere deine Codes besser^^
Tabs sind immer gut, und ich finde das der Code viel besser lesbar ist wenn die Klammern erst in der neuen Zeile geschrieben werden Wink

Naja hätte auch gelangt auf meinen Link zu klicken aber gute Arbeit HacKmaN =)

Chaosduckman :
Naja hätte auch gelangt auf meinen Link zu klicken aber gute Arbeit HacKmaN =)


Sry, hab ich nicht gesehen :/

Referenz-URLs