Datei-Inhalt in puffer speichern

N

nimmdenNAMEN

Hi,

ich soll für die Schule ein selbst ausgedachtes Projekt in C schreiben. Ich hab mir gedacht bzw. mich auch schon festgelegt ein Programm zu schreiben, welches per Passwort den Inhalt einer Datei verschlüsselst. Ich sitze jetzt schon eine Weile daran und habe zurzeit ein Problem. Und zwar habe ich vor den Inhalt der geöffneten Datei in einen Puffer abzulegen (im moment ein char* und mit malloc dynamisch angelegter speicher.... sollte es zumindest sein), welche ich dann per algorythmus (den ich mir noch ausdenke) verschlüsseln möchte, sodass man die datei nicht mehr ohne dem Programm und dem Passwort öffnen bzw. den Inhalt nicht mehr entziffern kann. Im moment möchte ich das ganze auf eine Textdatei reduzieren, und später vllt mal auf alle. Da ich selbst erst ein halbes Jahr ca. mit C Programmiere bin ihc noch nicht soweit mit dem Wissen, was allerdings zugleich der Ansporn für mich für ein solches Projekt ist, da ich ja dazulernen möchte.

So jetzt zu meinem Problem: Ich weiß nicht wie man den Inhalt einer Datei in einen Puffer übertragen kann... habe schon mal von der Funktion fgets gelesen, wonach ich gleich noch einmal googlen werde während ich hier auf eine Antwort warte. Allerdings hab ich noch nicht so viele Informationen gefunden, das ich eben weiter komme.

Im Moment handelt es sich nur um folgende Funktion:

Code:
int verschl(char *passwort, char *pfad)
{
    int rw = -1;
    FILE *datei;
    char *finhalt;
    size_t lLength = 0;
    
    datei = fopen(pfad, "rb");     
    
    if(getc_count(pfad, &lLength) != 0)           // gibt jetzt die dateigröße zurück! jetzt kann ich mit der größe lLength die finhalt anpassen
    {
        rw = -1; 
    }
    else
    {
        printf("Dateigroesse: %ld Bytes\n", lLength);
        rw = 0;
    }    
    finhalt = (char *) malloc(sizeof(lLength)+1);                            // finhalt muss noch auf größe überprüft werden
    memset(finhalt, 0x00, sizeof(lLength)+1);
    
    // hier gehört noch rein was mit dem "finhalt" der datei passiert!
    
    free(pfad);
    fclose(datei);
    free(finhalt);
    
    return rw;
}
 
Hab jetzt herausgefunden wie man den Inalt in einen Puffer überträgt, allerdings möchte ich die größe des Puffers ebenso dynamisch machen, damit ich eine x-beliebig lange Zeile darin ablegen kann. Außerdem hab ich noch das Problem das ich herausfinden muss wie ich den ganzen INhalt und nicht nur den der ersten Zeile speichere. Wenn ich EOF verwende gibt es immer fehler...

hier der Code:

Code:
int verschl(char *passwort, char *pfad)
{
    int rw = -1;
    FILE *datei;
    char *finhalt;
    char puffer[150] = {0x00};
    size_t lLength = 0;
    
    datei = fopen(pfad, "rb");     
    
    if(getc_count(pfad, &lLength) != 0)           // gibt jetzt die dateigröße zurück! jetzt kann ich mit der größe lLength die finhalt anpassen
    {
        rw = -1; 
    }
    else
    {
        printf("Dateigroesse: %ld Bytes\n", lLength);
        rw = 0;
    }    
    finhalt = (char *) malloc(sizeof(lLength)+1);                            // finhalt muss noch auf größe überprüft werden
    memset(finhalt, 0x00, sizeof(lLength)+1);

    while(atoi(finhalt = fgets(puffer, sizeof(puffer), datei)) != '\0');     // hier soll noch EOF anstatt '\0' funktionieren
    
    
    printf("%s\n", finhalt);
    // hier gehört noch rein was mit dem "finhalt" der datei passiert!
    
    free(pfad);
    fclose(datei);
    free(finhalt);
    
    return rw;
}
 
Hi.
C:
    finhalt = (char *) malloc(sizeof(lLength)+1);                            // finhalt muss noch auf größe überprüft werden
    memset(finhalt, 0x00, sizeof(lLength)+1);
sizeof(lLength) ist immer konstant (üblicherweise 4 oder 8). Wieso nimmst du sizeof?
C:
finhalt = malloc(lLength + 1);
C:
    while(atoi(finhalt = fgets(puffer, sizeof(puffer), datei)) != '\0');     // hier soll noch EOF anstatt '\0' funktionieren
Wozu rufst du dort atoi auf?

Und EOF funktioniert bei fgets nicht. Siehe http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

Wenn du den Dateiinhalt komplett einlesen willst, dann nimm fread. http://www.cplusplus.com/reference/clibrary/cstdio/fread/

Gruß
 
HI,

danke für die Antwort.

Das mit dem sizeof ist mir schon aufgefallen inzwischen.

Das mit fread werd ich mal ausprobieren danke!!
 

Neue Beiträge

Zurück