Я не совсем уверен, какова цель, но путь может быть таким:
public static void WriteByte<T>(T[] data, Converter<T, byte[]> converter, string path)
{
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
foreach (var x in data)
{
var bytes = converter(x);
foreach (var b in bytes)
{
writer.Write(b);
}
}
}
}
}
или проще
public static void WriteBytes<T>(T[] data, Converter<T, byte[]> converter, string path)
{
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
{
foreach (T x in data)
{
var buffer = converter(x);
stream.Write(buffer, 0, buffer.Length);
}
}
}
прецедент:
static void Main(string[] args)
{
byte[] data = { 1, 2, 3, 4, 5, 6, 7 };
WriteByte(data, (b) => new byte[] { b }, @"C:\Temp\MyBinary1.myb");
int[] intData = { 1, 2, 3, 4, 5, 6, 7 };
WriteByte(intData, BitConverter.GetBytes, @"C:\Temp\MyBinary2.myb");
long[] longData = { 1, 2, 3, 4, 5, 6, 7 };
WriteByte(longData, BitConverter.GetBytes, @"C:\Temp\MyBinary3.myb");
char[] charData = { '1', '2', '3', '4', '5', '6', '7' };
WriteByte(charData, BitConverter.GetBytes, @"C:\Temp\MyBinary4.myb");
string[] stringData = { "1", "2", "3", "4", "5", "6", "7" };
WriteByte(stringData, Encoding.Unicode.GetBytes, "C:\Temp\MyBinary5.myb");
}
ИЗМЕНИТЬ:
Другой подход может быть таким:
public static void WriteBytes3<T>(T[] data, Action<T> writer)
{
foreach (T x in data)
{
writer(x);
}
}
static void Main(string[] args)
{
using (FileStream stream = new FileStream(@"C:\Temp\MyBinary6.myb", FileMode.Create, FileAccess.Write, FileShare.None))
using (BinaryWriter writer = new BinaryWriter(stream))
{
WriteBytes3(intData, writer.Write);
}
}
person
Community
schedule
23.10.2016