Dopisywanie watości do pliku konfiguracyjnego

Awatar użytkownika
eaglefly
Użytkownik
Użytkownik
Posty: 52
Rejestracja: 25 mar 2008, o 22:07
Płeć: Mężczyzna
Lokalizacja: Wołomin
Podziękował: 16 razy

Dopisywanie watości do pliku konfiguracyjnego

Post autor: eaglefly »

Mam problem z wprowadzaniem zmian do pliku konfiguracyjnego w postaci:

Kod: Zaznacz cały

author="bla bla bla"
name=Intermail
version=1.1
time=180000
inboxfolderpath=/inbox
logpath=/log/maillog.log
mailboxpath=
users=
Chodzi mi przede wszystkim o wprowadzenie ścieżki za znakiem '=' w parametrze "mailboxpath=". Próbowałem dodać ścieżkę za pomocą funkcji:

Kod: Zaznacz cały

int change_mailboxconf(char *dir){
   
    char *buf = (char *)malloc(512);
    char *tmp;
    FILE *inp;
    int i;
       if((inp = fopen("intermail.conf","r+b")) == NULL){
           fprintf(stderr, "Nie moge otworzyc pliku intermail.conf \n");
           return -1;
       }
      for(i = 0; (*(buf + i) = getc(inp))!= EOF; i++);
       rewind(inp);
        if((tmp = strstr(buf, "mailboxpath="))!= NULL){
            if(fseek(inp, strlen(buf)-strlen(tmp) + strlen("mailboxpath="), SEEK_SET) == -1)
                fprintf(stderr,"Bład");
            fprintf(inp,"%s", dir);
         }
    free(buf);
    return 0;
}
Jednakże jej wynik jest co najmniej niezadowalający. Zostaje skasowany łańcuch "users=" , a łańcuch - ścieżka, która jest dodawana za znakiem '=' wygląda w ten sposob:

Kod: Zaznacz cały

author="Bla bla bla"
name=Intermail
version=1.1
time=180000
inboxfolderpath=/inbox
logpath=/log/maillog.log
mailboxpath=��߷�ĥܿ
Ścieżka, która jest parametrem funkcji jest tworzona za pomocą funkcji:

Kod: Zaznacz cały

char *localyze_mailbox(void){ 
    char *dir = NULL;
    char buf[128];
    int n  = 128;
 
    dir = getcwd(buf, n);
    if(chdir("mailbox") != 0){
        printf("Plik mailbox występuje we właściwym miejscu\n");
        return NULL;
    }
        strcat(dir, "/mailbox");
        chdir("..");
        printf("%s\n", dir);
return dir;
}
Wywołanie w main() ma postać:

Kod: Zaznacz cały

change_mailboxconf(localyze_mailbox());
Ostatnio zmieniony 14 lis 2009, o 22:27 przez eaglefly, łącznie zmieniany 2 razy.
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

Dopisywanie watości do pliku konfiguracyjnego

Post autor: Szemek »

W oczy rzuciła mi się linijka

Kod: Zaznacz cały

if((inp = fopen("intermail.conf","r+b")) == NULL)
zamiast "r+b" napisałbym "r+"

ODPOWIEDZ