-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathSettingsPersister.cs
58 lines (51 loc) · 1.65 KB
/
SettingsPersister.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System.IO;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace SDRSharp.Tetra
{
public class SettingsPersister
{
private string _filename;
private readonly string _settingsFolder;
public SettingsPersister(string fileName)
{
_filename = fileName;
_settingsFolder = Path.GetDirectoryName(Application.ExecutablePath);
}
public TetraSettings ReadStored()
{
var result = ReadObject<TetraSettings>(_filename);
if (result != null)
{
return result;
}
return new TetraSettings();
}
public void PersistStored(TetraSettings entries)
{
WriteObject(entries, _filename);
}
private T ReadObject<T>(string fileName)
{
var filePath = Path.Combine(_settingsFolder, fileName);
if (File.Exists(filePath))
{
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
var ser = new XmlSerializer(typeof(T));
return (T)ser.Deserialize(fileStream);
}
}
return default(T);
}
private void WriteObject<T>(T obj, string fileName)
{
var filePath = Path.Combine(_settingsFolder, fileName);
using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
{
var ser = new XmlSerializer(obj.GetType());
ser.Serialize(fileStream, obj);
}
}
}
}