-
Notifications
You must be signed in to change notification settings - Fork 75
/
Copy pathFileSystemOptions.cs
83 lines (78 loc) · 3.46 KB
/
FileSystemOptions.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Repository.Serialization;
namespace Repository.FileSystem
{
public class FileSystemOptions<T>
{
//===============================================================
public FileSystemOptions()
{
Serializer = new JsonSerializer<List<T>>();
FolderPath = "";
FileExtension = ".txt";
StreamGenerator = new StandardStreamGenerator();
UseTypeNameFolder = false;
FileStorageType = FileStorageType.SingleFile;
}
//===============================================================
public ISerializer<List<T>> Serializer { get; set; }
//===============================================================
public String FolderPath { get; set; }
//===============================================================
public String FileExtension { get; set; }
//===============================================================
public StreamGenerator StreamGenerator { get; set; }
//===============================================================
public bool UseTypeNameFolder { get; set; }
//===============================================================
public FileStorageType FileStorageType { get; set; }
//===============================================================
}
public enum FileStorageType
{
SingleFile,
FilePerObject
}
public abstract class StreamGenerator
{
//================================================================================
public abstract Stream GetReadStream(String filePath);
//================================================================================
public abstract Stream GetWriteStream(String filePath);
//================================================================================
}
public class StandardStreamGenerator : StreamGenerator
{
//================================================================================
public override Stream GetReadStream(string filePath)
{
return new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
}
//================================================================================
public override Stream GetWriteStream(string filePath)
{
return new FileStream(filePath, FileMode.Create, FileAccess.Write);
}
//================================================================================
}
public class GZipStreamGenerator : StreamGenerator
{
//================================================================================
public override Stream GetReadStream(string filePath)
{
return new GZipStream(new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), CompressionMode.Decompress);
}
//================================================================================
public override Stream GetWriteStream(string filePath)
{
return new GZipStream(new FileStream(filePath, FileMode.Create, FileAccess.Write), CompressionMode.Compress);
}
//================================================================================
}
}