I am trying to write data to a file and the code below includes a writer
method which allows to override the write()
method of the base class GH_Component
. The code compiles with no erros but the data does not get written as planned. What am i doing wrong?
public class SettingsComponent : GH_Component
{
public SettingsComponent(): base("LoadSettings", "LoadSettings", "Loading ini", "Extra", "Silkworm") { }
public override void CreateAttributes()
{
m_attributes = new SettingsComponentAttributes(this);
}
string m_settings_temp;
string[] m_settings;
public void ShowSettingsGui()
{
var dialog = new OpenFileDialog { Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*" };
if (dialog.ShowDialog() != DialogResult.OK) return;
m_settings_temp = File.ReadAllText(dialog.FileName);
m_settings = m_settings_temp.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
ExpireSolution(true);
}
public override bool Read(GH_IO.Serialization.GH_IReader reader)
{
if (m_settings != null && m_settings.Length > 0)
{
Int32 a = m_settings.Length;
reader.TryGetInt32("StringCount", ref a);
for (int i = 0; i < m_settings.Length; i++)
{
reader.TryGetString("String", i, ref m_settings[i]);
}
}
return base.Read(reader);
}
public override bool Write(GH_IO.Serialization.GH_IWriter writer)
{
if (m_settings != null && m_settings.Length > 0)
{
writer.SetInt32("StringCount", m_settings.Length);
for (int i = 0; i < m_settings.Length; i++)
{
writer.SetString("String", i, m_settings[i]);
}
}
return base.Write(writer);
}
protected override void SolveInstance(IGH_DataAccess DA)
{
if (m_settings == null)
{
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "You must declare some valid settings");
return;
}
else
{
DA.SetDataList(0, m_settings);
}
}
I needed to override the Write() and Read() methods on GH_Component:
//deserializes the variable m_settings to make the data persistant
public override bool Write(GH_IWriter writer)
{
if (m_settings != null && m_settings.Length > 0)
{
writer.SetInt32("StringCount", m_settings.Length);
for (int i = 0; i < m_settings.Length; i++)
{
writer.SetString("String", i, m_settings[i]);
}
}
return base.Write(writer);
}
//deserializes the variable m_settings to make the data persistant
public override bool Read(GH_IReader reader)
{
m_settings = null;
int count = 0;
reader.TryGetInt32("StringCount", ref count);
if (count > 0)
{
System.Array.Resize(ref m_settings, count);
for (int i = 0; i < count; i++)
{
string line = null;
reader.TryGetString("String", i, ref line);
m_settings[i] = line;
}
}
return base.Read(reader);
}