void Settings::Load() { Directory appDataDir = GetAppDataDir(); if (appDataDir.Exists()) { File config; config.SetLocation(appDataDir.Location().OriginalString() + "/config.txt"); FileStream fs; if (config.Exists()) { AutoPointerArray<UInt8> buf(new UInt8[config.Size()], config.Size()); if (fs.Open(config.Location(), FileAccessMode::Read, FileAccessPriority::ReadThroughput)) { fs.Read(buf.Get(), 0, buf.Size()); fs.Close(); for (Size i = 0, s = 0; i < buf.Size(); ++i) if (buf[i] == '\n') { String line = String(reinterpret_cast<const char*>(&buf[s]), i - s); AutoPointerArray<String> keyValue = line.Split(String("=")); if (keyValue.Count() == 2) { const char* key = StringCache::Find(keyValue[0]); if (key == 0) key = keyValue[0].c_str(); m_PImpl->m_Data[key] = keyValue[1]; } s = i+1; } } } } }
void Settings::Save() { Directory appDataDir = GetAppDataDir(); if (!appDataDir.Exists()) appDataDir.CreateNewDirectory(); auto it = m_PImpl->m_Data.Begin(); auto end = m_PImpl->m_Data.End(); File config; config.SetLocation(appDataDir.Location().OriginalString() + "/config.txt"); config.CreateNewFile(); FileStream fs; if (fs.Open(config.Location(), FileAccessMode::Write, FileAccessPriority::DelayReadWrite)) { for (; it != end; ++it) { String buf = String::UnsafeStringCreation(it->first) + "=" + it->second + "\n"; fs.Write(reinterpret_cast<const UInt8*>(buf.c_str()), 0, buf.Length()); } fs.Close(); } }