Schreiben eines Zeichenketten-Parameters

int WritePrivateProfileString(char *Section, char *Name, char *Value, char *File)


Implementiert in der Datei params.c des Projektes Transfermatrixsimulation.


Falls die Parameterdatei noch nicht existiert, wird versucht, sie zu erzeugen und mit dem neuen Eintrag und seinem Abschnitt als einzigem Inhalt zu füllen. Gelingt dies nicht, wird die Routine fehlerhaft beendet.

Existiert die Datei schon, so wird eine neue Datei mit der zusätzlichen Erweiterung .bkp erzeugt, in die alle Einträge aus der Originaldatei kopiert werden, bis der gewünschte Abschnitt in der Originaldatei gefunden ist. Existiert der Abschnitt noch gar nicht, so wird an das Ende der kopierten Datei der gewünschte Abschnitt mit dem angegebenen Eintrag ergänzt.

Existiert der Abschnitt, so wird dieser nach dem angegebenen Namen durchsucht. Wird das Ende des Abschnitts erreicht, ohne daß der Name gefunden wurde, so wird ein entsprechender Eintrag ergänzt und der Rest der Originaldatei in die Kopie übertragen. Existiert auch der Name, so wird statt der entsprechenden Zeile der neue Eintrag eingefügt und ebenfalls der Rest der Originaldatei übertragen.

Am Schluß wird die neue Datei in die alte Datei umbenannt, so daß die alte Datei gleichzeitig gelöscht wird.


Parameter:

Section, char *
Name des Abschnittes, in dem der Parameter einzutragen ist
Name, char *
Name des Parameters
Value, char *
Zu speichernder Parameterwert
File, char *
Name der Parameterdatei

Rückgabewert (int):

1, falls der Parameter erfolgreich geschrieben werden konnte.

Siehe auch:

WritePrivateProfileInt, WritePrivateProfileFloat, GetPrivateProfileString
int WritePrivateProfileString(char *Section,char *Name,char *Value,
                  char *File)
{
  int rc;             /* Ergebnis des File-Holens    */ 
  int qfh,dfh;        /* Filehandles                 */
  char FName[255];    /* Name for copied File        */
  char Line[255];     /* One Line of the source file */
  struct stat mystat; /* Statistics of the s. file   */

  if ((qfh=open(File,O_RDONLY))==-1) {
    if ((dfh=open(File,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1) return(0);
    write(dfh,"[",1);
    write(dfh,Section,strlen(Section));
    write(dfh,"]\n",2);
    write(dfh,Name,strlen(Name));
    write(dfh,"=",1);
    write(dfh,Value,strlen(Value));
    write(dfh,"\n",1);
    close(dfh);
    return(1);
  }
  if (strlen(File)+4>sizeof(FName)) {
    close(qfh);
    return(0);
  }
  if (fstat(qfh,&mystat)) mystat.st_mode=0644;
  strcpy(FName,File);
  strcat(FName,".bkp");
  if ((dfh=open(FName,O_WRONLY|O_CREAT|O_TRUNC,mystat.st_mode))==-1) {
    close(qfh);
    return(0);
  }
  while ((rc=GetLine(Line,sizeof(Line),qfh))!=0 && 
     (Line[0]!='[' || strlen(Line)<strlen(Section)+2 || 
      strncmp(Line+1,Section,strlen(Section))
      || Line[strlen(Section)+1]!=']')) {
    write(dfh,Line,strlen(Line));
    write(dfh,"\n",1);
  }
  if (!rc) {
    write(dfh,"\n[",2);
    write(dfh,Section,strlen(Section));
    write(dfh,"]\n",2);
    write(dfh,Name,strlen(Name));
    write(dfh,"=",1);
    write(dfh,Value,strlen(Value));
    write(dfh,"\n",1);
  } else {
    write(dfh,Line,strlen(Line));
    write(dfh,"\n",1);   
    while ((rc=GetLine(Line,sizeof(Line),qfh))!=0 && Line[0]!='[' && 
       Line[0] && (strlen(Line)<strlen(Name)+1 ||
            strncmp(Line,Name,strlen(Name)) ||
            Line[strlen(Name)]!='=')) {
      write(dfh,Line,strlen(Line));
      write(dfh,"\n",1);
    }
    if (rc) {
      if (Line[0]!='[' && Line[0]) {
    write(dfh,Name,strlen(Name));
    write(dfh,"=",1);
    write(dfh,Value,strlen(Value));
    write(dfh,"\n",1);
      } else {
    write(dfh,Name,strlen(Name));
    write(dfh,"=",1);
    write(dfh,Value,strlen(Value));
    write(dfh,"\n",1);
    write(dfh,Line,strlen(Line));
    write(dfh,"\n",1);
      }
      while(GetLine(Line,sizeof(Line),qfh)) {
    write(dfh,Line,strlen(Line));
    write(dfh,"\n",1);
      }
    } else {
      write(dfh,Name,strlen(Name));
      write(dfh,"=",1);
      write(dfh,Value,strlen(Value));
      write(dfh,"\n",1);
    }
  }  
  close(qfh);
  close(dfh);
  rename(FName,File);
  return(1);
}

Diese Seite wurde compiliert/modifiziert/erzeugt am 06.03.1997/01.09.1995/30.08.1995 von Ralf Bundschuh/Ralf Bundschuh.
Diese Seite und ihr Inhalt sind (c) 1995 von Ralf Bundschuh.