-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEsfsDataIo.cs
129 lines (101 loc) · 4.43 KB
/
EsfsDataIo.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Linq;
using System.Text;
namespace EsfsLite
{
public static class EsfsDataIo
{
public static void PutFloatMetaToFile(Esfs fs, string pathName, float metaFloat)
{
PutMetaToFile(fs, pathName, BitConverter.GetBytes(metaFloat));
}
public static float GetFloatMetaFromFile(Esfs fs, string pathName)
{
return BitConverter.ToSingle(GetMetaFromFile(fs, pathName), 0);
}
public static void PutStringMetaToFile(Esfs fs, string pathName, string metaString)
{
PutMetaToFile(fs, pathName, Encoding.UTF8.GetBytes(metaString));
}
public static void PutMetaToFile(Esfs fs, string pathName, byte[] metaData)
{
if (fs.FileExists(pathName) == false)
{
fs.CreateFile(pathName, EsfsFileAttributes.Normal);
}
var fileInstance = fs.OpenFile(pathName);
fileInstance.SetMeta(metaData);
}
public static string GetStringMetaFromFile(Esfs fs, string pathName)
{
return Encoding.UTF8.GetString(GetMetaFromFile(fs, pathName));
}
public static byte[] GetMetaFromFile(Esfs fs, string pathName)
{
var fileInstance = fs.OpenFile(pathName);
return fileInstance.GetMeta();
}
public static void PutStringToFile(Esfs fs, string pathName, string dataString)
{
var stringBytes = Encoding.UTF8.GetBytes(dataString);
if (fs.FileExists(pathName) == false)
{
fs.CreateFile(pathName, EsfsFileAttributes.Normal);
}
var fileInstance = fs.OpenFile(pathName);
fileInstance.WriteBytes(stringBytes, 0, stringBytes.Length);
}
public static string GetStringFromFile(Esfs fs, string pathName)
{
var fileInstance = fs.OpenFile(pathName);
var fileBytes = new byte[fileInstance.Size];
fileInstance.ReadBytes(fileBytes, 0, (int) fileInstance.Size);
return Encoding.UTF8.GetString(fileBytes);
}
public static void PutFloatsToFile(Esfs fs, string pathName, float[] floats)
{
PutFloatsToFile(fs, pathName, floats, 0, floats.Length);
}
public static void PutFloatsToFile(Esfs fs, string pathName, float[] floats, int offset, int length)
{
var bytesBufferSize = length*sizeof (float);
var bytesBuffer = new byte[bytesBufferSize];
Buffer.BlockCopy(floats, offset, bytesBuffer, 0, bytesBufferSize);
if (fs.FileExists(pathName) == false)
{
fs.CreateFile(pathName, EsfsFileAttributes.Normal);
}
fs.CreateFile(pathName, EsfsFileAttributes.Normal);
var fileInstance = fs.OpenFile(pathName);
fileInstance.WriteBytes(bytesBuffer, 0, bytesBufferSize);
}
public static float[] GetFloatsFromFile(Esfs fs, string pathName)
{
var fileInfo = fs.FindFile(pathName).ToArray();
if (fileInfo.Any() == false)
{
throw new EsfsException(string.Format("Unable to read floats from file: No '{0}' file found", pathName));
}
var bufferFloats = new float[fileInfo.First().Size / sizeof(float)];
if (GetFloatsFromFile(fs, pathName, bufferFloats, 0, bufferFloats.Length) != bufferFloats.Length)
{
throw new EsfsException(string.Format("Unable to read floats from file '{0}': Not enough data", pathName));
}
return bufferFloats;
}
public static int GetFloatsFromFile(Esfs fs, string pathName, float[] floatsBuffer, int offset, int length)
{
var fileInstance = fs.OpenFile(pathName);
var floatsToRead = length;
var floatsInFile = (int) fileInstance.Size/sizeof (float);
if (floatsInFile < floatsToRead)
{
floatsToRead = floatsInFile;
}
var bytesBuffer = new byte[floatsToRead*sizeof (float)];
fileInstance.ReadBytes(bytesBuffer, 0, bytesBuffer.Length);
Buffer.BlockCopy(bytesBuffer, 0, floatsBuffer, 0, bytesBuffer.Length);
return floatsToRead;
}
}
}