-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSampleFile.cs
More file actions
59 lines (47 loc) · 1.68 KB
/
SampleFile.cs
File metadata and controls
59 lines (47 loc) · 1.68 KB
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
59
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
namespace AI_neural;
[DataContract]
[KnownType(typeof(SampleFile))]
[KnownType(typeof(BitImage8))]
public class SampleFile: IExtensibleDataObject
{
private const string Dir = "samples";
private const string Extension = "bitimg";
[DataMember] public readonly string SampleName;
[DataMember] public readonly BitImage8 Image;
public SampleFile(string sampleName, BitImage8 image)
{
SampleName = sampleName;
Image = image;
}
private static string CreateFilename(string sampleName) => $"{Dir}/{sampleName}.{Extension}";
private string CreateFilename() => CreateFilename(SampleName);
private static readonly DataContractSerializer Serializer = new(typeof(SampleFile));
public void Save()
{
using var stream = File.Open(CreateFilename(), FileMode.Create);
Serializer.WriteObject(stream, this);
}
private static SampleFile? Load(string file)
{
using var stream = File.Open(file, FileMode.Open);
return Serializer.ReadObject(stream) as SampleFile;
}
private static IEnumerable<SampleFile> LoadAllSamples() =>
from file in Directory.GetFiles(Dir)
where file.EndsWith($".{Extension}") select Load(file) into sampleFile
where sampleFile != null select sampleFile;
public static IEnumerable<SampleFile> LoadAll()
{
Directory.CreateDirectory(Dir);
return LoadAllSamples();
}
public static void Delete(string sampleName)
{
File.Delete(CreateFilename(sampleName));
}
public ExtensionDataObject? ExtensionData { get; set; }
}