Ich lese bei meinem Programm mit folgender Routine die Sprache aus der Konfigurationsdatei (achtung, im initialization-Teil (muss so sein!)):
Code: Alles auswählen
if FileExists(ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf'
else if FileExists(ExtractFilePath(GetAppConfigFile(true))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(GetAppConfigFile(true))+'cookiepascal.conf'
else
cfgfile := ExtractFilePath(ParamStr(0))+'cookiepascal.conf';
Assign(init_F, cfgfile);
Reset(init_F);
While not eof(init_F) do begin
readln(init_F, init_tmp);
if trim(init_tmp) <> '' then begin
init_Posi := Pos(' ', init_tmp);
init_title := Copy(init_tmp, 0, (init_Posi-1));
init_value := Copy(init_tmp, (init_Posi+1), 9999);
if init_title = 'lang' then init_lang := init_value;
end;
end;
if FileExists('/usr/share/cookiepascal/lang/CookiePascal.'+init_lang+'.po') then
lngfile := '/usr/share/cookiepascal/lang/CookiePascal.'+init_lang+'.po'
else if FileExists(ExtractFilePath(ParamStr(0))+'lang/CookiePascal.'+init_lang+'.po') then
lngfile := ExtractFilePath(ParamStr(0))+'lang/CookiePascal.'+init_lang+'.po'
else if FileExists('/usr/share/cookiepascal/lang/CookiePascal.po') then
lngfile := '/usr/share/cookiepascal/lang/CookiePascal.po'
else if FileExists('lang/CookiePascal.po') then
lngfile := 'lang/CookiePascal.po';
Code: Alles auswählen
cfgfile := 'bla';
{$IFDEF WINDOWS}
if FileExists(ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf'
else if FileExists(ExtractFilePath(ParamStr(0))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(ParamStr(0))+'cookiepascal.conf'
else if FileExists('cookiepascal.conf') then
cfgfile := 'cookiepascal.conf';
{$ELSE}
if FileExists(ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf'
else if FileExists(ExtractFilePath(GetAppConfigFile(true))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(GetAppConfigFile(true))+'cookiepascal.conf'
else if FileExists(ExtractFilePath(ParamStr(0))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(ParamStr(0))+'cookiepascal.conf'
else if FileExists('cookiepascal.conf') then
cfgfile := 'cookiepascal.conf';
{$ENDIF}
if cfgfile <> 'bla' then begin
{$I-}
Assign(init_F, cfgfile);
Reset(init_F);
While not eof(init_F) do begin
readln(init_F, init_tmp);
if trim(init_tmp) <> '' then begin
init_Posi := Pos(' ', init_tmp);
init_title := Copy(init_tmp, 0, (init_Posi-1));
init_value := Copy(init_tmp, (init_Posi+1), 9999);
if init_title = 'lang' then init_lang := init_value;
end;
end;
{$I+}
end else begin
init_lang := 'en';
end;
{$IFDEF WINDOWS}
if FileExists(ExtractFilePath(ParamStr(0))+'lang\CookiePascal.po') then
lngfile := ExtractFilePath(ParamStr(0))+'lang\CookiePascal.po'
else if FileExists('lang\CookiePascal.po') then
lngfile := 'lang\CookiePa[code=laz]
{$ELSE}
if FileExists('/usr/share/cookiepascal/lang/CookiePascal.'+init_lang+'.po') then
lngfile := '/usr/share/cookiepascal/lang/CookiePascal.'+init_lang+'.po'
else if FileExists(ExtractFilePath(ParamStr(0))+'lang/CookiePascal.'+init_lang+'.po') then
lngfile := ExtractFilePath(ParamStr(0))+'lang/CookiePascal.'+init_lang+'.po'
else if FileExists('/usr/share/cookiepascal/lang/CookiePascal.po') then
lngfile := '/usr/share/cookiepascal/lang/CookiePascal.po'
else if FileExists(ExtractFilePath(ParamStr(0))+'lang/CookiePascal.po') then
lngfile := ExtractFilePath(ParamStr(0))+'lang/CookiePascal.po'
else if FileExists('lang/CookiePascal.po') then
lngfile := 'lang/CookiePascal.po';
{$ENDIF}[/code]
Jetzt gibt es Probleme ("RunError(5)") bei der Zeile "Assign(init_F, cfgfile);". Im Internet las ich, das hieße so viel wie "Access denied". Aber wie geht das? Die Datei existiert, ist nicht schreibgeschützt, liegt auf einer FAT-Partition und ist nicht rechtemäßig eingeschränkt. Sie wurde auch von meinem Benutzerkonto erstellt.
Kommentiere ich das ganze aus und packe ins FormCreate folgenden Code, bekomme ich als MessageBoxen einmal den Pfad (zu einer Datei die genau unter diesem Pfad zu 100% existiert!) und einmal "-1", also die Angabe, die Datei würde nicht existieren.
Code: Alles auswählen
if FileExists(ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(GetAppConfigFile(false))+'cookiepascal.conf'
else if FileExists(ExtractFilePath(ParamStr(0))+'cookiepascal.conf') then
cfgfile := ExtractFilePath(ParamStr(0))+'cookiepascal.conf'
else if FileExists('cookiepascal.conf') then
cfgfile := 'cookiepascal.conf';
ShowMessage(cfgfile);
ShowMessage(booltostr(FileExists(cfgfile)));
Den kompletten Code des Projekts gibt es hier im SVN, allerdings ohne die Anpassungen mit {$IFDEF WINDOWS}, die oben zu sehen sind.