Идея была такая, что программа читает файл конфига в директории с экзешником, а если его нет - создаёт. На деле, если файл есть, программа читает конфиг, а если нет - идёт к except и... вылетает с исключением EOSError 1410: Class Already Exists на первой же строчке. Добавил в начало except FStream.Free - теперь вылетает на нём. Его надо как-то по-другому освобождать, или дело вообще не в TFileStream?
- Код: Выделить всё
constructor HomerConf.Read;
var
FStream: TFileStream;
JParser: TJSONParser;
JData: TJSONData;
JObject: TJSONObject;
i, n: integer;
begin
try
try
FStream:=TFileStream.Create('config.json',fmOpenRead);
try
try
JParser:=TJSONParser.Create(FStream);
try
JData:=JParser.Parse;
JObject := TJSONObject(JData);
GamePath := JObject.Get('GamePath');
UserPath := JObject.Get('UserPath');
NumActiveMods := JData.FindPath('ActiveMods').Count;
SetLength(ActiveMods, NumActiveMods);
for i := 0 to NumActiveMods-1 do
ActiveMods[i] := JData.FindPath('ActiveMods['+IntToStr(i)+']').AsString;
n := JData.FindPath('Mods').Count;
SetLength(Mods, n);
for i := 0 to n-1 do
Mods[i] := JData.FindPath('Mods['+IntToStr(i)+']').AsString;
except
end;
except
end;
finally
JParser.Free;
end;
except
try
FStream.Free;
FStream:=TFileStream.Create('config.json',fmOpenWrite);
JData := GetJSON('{}');
JObject := TJSONObject(JData);
GamePath := ExpandFileName('./');
UserPath := GetEnvironmentVariable('APPDATA');
jObject.Add('GamePath', GamePath);
jObject.Add('UserPath', UserPath);
except
end;
end;
finally
FStream.Free;
end;
end;