I
so, ich habe jetzt mal den gesamten code überarbeitet und wäre über verbesserungs
vorschläge sehr froh...
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <Windows.h>
#include "DEF.H"
struct Settings{
char theme[3][100];
char key[3][9][100];
char StdValue[3][9][100];
char werte[3][9][100];
int AnzSV[3][1];
} Settings;
void FillIniStructST(void);
void FillStdValue(void);
void WriteStdIni(void);
void ReadIni(void);
int main(void){
int i, j;
char pfad[100];
FillIniStructST();
FillStdValue();
ReadIni();
for(i=0; i<3; i++){
printf("\n[%s]\n\n", Settings.theme[i]);
for(j=0; j < Settings.AnzSV[i][0]; j++){
printf("%s = ", Settings.key[i][j]);
printf("%s\n", Settings.werte[i][j]);
}
}
getch();
return 0;
}
void FillIniStructST(void){
int i, j, z=0;
char string[100];
char help;
Settings.AnzSV[0][0]=3;
Settings.AnzSV[1][0]=2;
Settings.AnzSV[2][0]=9;
FILE *dat;
dat=fopen("StdIni.bcs","r+");
if(dat == NULL)
return;
for(i=0; i<3; i++){
z=0;
do{
help=fgetc(dat);
if(help != ';' && help != '\n')
string[z++]=help;
}while(help != ';');
string[z]='\0';
strcpy(Settings.theme[i], (const char *) string);
}
for(i=0; i<3; i++){
for(j=0; j < Settings.AnzSV[i][0]; j++){
z=0;
do{
help=fgetc(dat);
if(help != ';' && help != '\n')
string[z++]=help;
}while(help != ';');
string[z]='\0';
strcpy(Settings.key[i][j], (const char *) string);
}
}
fclose(dat);
}
void FillStdValue(void){
FILE* dat;
int i, j, z;
char help;
dat=fopen("StdValue.bcs", "r");
if(dat==NULL)
return;
for(i=0; i<3; i++){
for(j=0; j<Settings.AnzSV[i][0]; j++){
z=0;
do{
help=fgetc(dat);
if(help != ';' && help != '\n'){
switch(help){
case 'ä': help = ae;
break;
case 'Ä': help = AE;
break;
case 'ö': help = oe;
break;
case 'Ö': help = OE;
break;
case 'ü': help = ue;
break;
case 'Ü': help = UE;
break;
case 'ß': help = ss;
break;
}
Settings.StdValue[i][j][z++]=help;
}
}while(help != ';');
Settings.StdValue[i][j][z]='\0';
}
}
}
void WriteStdIni(void){
int i, j;
for(i=0; i<3; i++){
for(j=0; j < Settings.AnzSV[i][0]; j++){
WritePrivateProfileString(Settings.theme[i], Settings.key[i][j], Settings.StdValue[i][j],"setting/test.ini");
}
}
}
void ReadIni(void){
int i, j;
char pfad[100];
DWORD destSize=100;
FILE *IniError;
IniError = fopen("setting/test.ini", "r");
// if(GetPrivateProfileString(Settings.theme[0], Settings.key[0][0],"", pfad,"setting/test.ini") == 0x2) funktioniert nicht, wenn file nicht vorhanden, laut msdn sollte der wert 0x2 zurück geliefert werden.
if(IniError == NULL)
WriteStdIni();
fclose(IniError);
for(i=0; i<3; i++){
for(j=0; j < Settings.AnzSV[i][0]; j++){
GetPrivateProfileString(Settings.theme[i], Settings.key[i][j], "", pfad, destSize, "setting/test.ini");
strcpy(Settings.werte[i][j], (const char *) pfad);
}
}
}
was sagt ihr so dazu?