namespace ConsoleApplication
{
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Microshaoft;
public class Class1
{
//[STAThread]
[Serializable]
public class Entry
{
[XmlElement("F1")]
public string F1 { get; set; }
[XmlElement("F2")]
public int F2 { get; set; }
[XmlAttribute("F3")]
public DateTime F3 { get; set; }
public DateTime? FF3 { get; set; }
[XmlArrayItem("Entry2", typeof(Entry2))]
[XmlArray("Entry2S")]
public Entry2[] Entry2S { get; set; }
};
public class Entry2
{
[XmlElement("F1")]
public string F1 { get; set; }
[XmlElement("F2")]
public int F2 { get; set; }
[XmlAttribute("F3")]
public DateTime F3 { get; set; }
public DateTime? FF3 { get; set; }
};
static void Main(string[] args)
{
var list = new List<Entry>()
{
new Entry()
{
F1 = "a"
, F2= 1
, F3 = DateTime.Now
, FF3 = null
, Entry2S = new []
{
new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
, FF3 = null
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
, FF3 = DateTime.Now
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
}
}
,new Entry()
{
F1= "b"
, F2= 2
, F3 = DateTime.Now
, FF3 = null
, Entry2S = new []
{
new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
}
}
,new Entry()
{
F1= "c"
, F2= 3
, F3 = DateTime.Now
, FF3 = DateTime.Now
, Entry2S = new []
{
new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
}
}
};
var dataTable = list.ToDataTable<Entry>();
var keyWords = new[] { "", "" };
dataTable = list.AsEnumerable().ToDataTable();
var l = dataTable.ToList<Entry>();
l.ForEach
(
(x) =>
{
x.Entry2S = new[]
{
new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
, new Entry2 ()
{
F1 = "sadasd"
, F2 = 10
, F3 = DateTime.Now
}
};
}
);
string xml = SerializerHelper.XmlSerializerObjectToXml<List<Entry>>(l, Encoding.UTF8);
Console.WriteLine(xml);
Console.ReadLine();
}
}
}
namespace Microshaoft
{
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.ComponentModel;
public static class ExtensionMethodsManager
{
public static DataRow[] FullTextSearch(this DataTable dataTable, string[] keyWords)
{
return
dataTable.AsEnumerable().Where<DataRow>
(
(x) =>
{
return
keyWords.All
(
(xx) =>
{
return
x.ItemArray
.Select
(
(xxx) =>
{
return xxx.ToString();
}
)
.Any<string>
(
(xxx) =>
{
return xxx.Contains(xx);
}
);
}
);
}
).ToArray();
}
private static List<Type> _typesWhiteList = new List<Type>()
{
typeof(int)
, typeof(int?)
, typeof(long)
, typeof(long?)
, typeof(string)
, typeof(DateTime)
, typeof(DateTime?)
};
private class PropertyAccessor
{
public Func<object, object> Getter;
public Action<object, object> Setter;
public PropertyInfo Property;
}
private static Dictionary
<
Type
, Dictionary
<
string
, PropertyAccessor
>
> _typesPropertiesAccessors = new Dictionary<Type, Dictionary<string, PropertyAccessor>>();
private static Dictionary<string, PropertyAccessor> GetTypePropertiesAccessors(Type type)
{
var properties = type.GetProperties();
Dictionary<string, PropertyAccessor> dictionary = null;
Array.ForEach
(
properties
, (x) =>
{
if (
_typesWhiteList.Any
(
(xx) =>
{
return xx == x.PropertyType;
}
)
)
{
var accessor = new PropertyAccessor()
{
Getter = DynamicPropertyAccessor.CreateGetPropertyValueFunc(type, x.Name)
,
Setter = DynamicPropertyAccessor.CreateSetPropertyValueAction(type, x.Name)
,
Property = x
};
if (dictionary == null)
{
dictionary = new Dictionary<string, PropertyAccessor>();
}
dictionary.Add(x.Name, accessor);
}
}
);
return dictionary;
}
public static DataTable ToDataTable<TEntry>(this IEnumerable<TEntry> ie)
{
var type = typeof(TEntry);
var accessors = GetTypePropertiesAccessors(type);
var accessorsList = accessors.ToList();
DataTable dataTable = GenerateEmptyDataTable(accessorsList);
DataColumnCollection dcc = dataTable.Columns;
if (dataTable != null)
{
using (IEnumerator<TEntry> enumerator = ie.GetEnumerator())
{
while (enumerator.MoveNext())
{
var row = dataTable.NewRow();
foreach (DataColumn c in dcc)
{
PropertyAccessor accessor = null;
if (accessors.TryGetValue(c.ColumnName, out accessor))
{
object v = accessor.Getter(enumerator.Current);
if (v == null)
{
v = DBNull.Value;
}
row[c] = v;
}
}
dataTable.Rows.Add(row);
}
}
}
return dataTable;
}
private static DataTable GenerateEmptyDataTable(List<KeyValuePair<string, PropertyAccessor>> accessorsList)
{
DataTable dataTable = null;
accessorsList
.ForEach
(
(x) =>
{
if (dataTable == null)
{
dataTable = new DataTable();
}
var propertyType = x.Value.Property.PropertyType;
if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
NullableConverter nullableConvert = new NullableConverter(propertyType);
propertyType = nullableConvert.UnderlyingType;
}
var propertyName = x.Value.Property.Name;
var column = new DataColumn
(
propertyName
, propertyType
);
dataTable.Columns.Add(column);
}
);
return dataTable;
}
public static DataTable ToDataTable<TEntry>(this List<TEntry> list)
// where TEntry : new()
{
var type = typeof(TEntry);
var accessors = GetTypePropertiesAccessors(type);
var accessorsList = accessors.ToList();
DataTable dataTable = GenerateEmptyDataTable(accessorsList);
DataColumnCollection dcc = dataTable.Columns;
if (dataTable != null)
{
list.ForEach
(
(x) =>
{
var row = dataTable.NewRow();
foreach (DataColumn c in dcc)
{
PropertyAccessor accessor = null;
if (accessors.TryGetValue(c.ColumnName, out accessor))
{
object v = accessor.Getter(x);
if (v == null)
{
v = DBNull.Value;
}
row[c] = v;
}
}
dataTable.Rows.Add(row);
}
);
}
return dataTable;
}
public static List<TEntry> ToList<TEntry>(this DataTable dataTable)
where TEntry : new()
{
var type = typeof(TEntry);
var columns = dataTable.Columns;
var actions = new Dictionary<string, Action<object, object>>();
foreach (DataColumn c in columns)
{
var columnName = c.ColumnName;
var action = DynamicPropertyAccessor.CreateSetPropertyValueAction
(
typeof(TEntry)
, columnName
);
actions[columnName] = action;
}
List<TEntry> list = null;
var rows = dataTable.Rows;
foreach (DataRow r in rows)
{
var entry = new TEntry();
if (list == null)
{
list = new List<TEntry>();
}
foreach (DataColumn c in columns)
{
var columnName = c.ColumnName;
var v = r[columnName];
if (!DBNull.Value.Equals(v))
{
var action = actions[columnName];
action(entry, v);
}
}
list.Add(entry);
}
return list;
}
}
}
namespace Microshaoft
{
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.ComponentModel;
public class DynamicPropertyAccessor
{
private static Assembly GetAssemblyByTypeName(string typeName)
{
return AppDomain.CurrentDomain.GetAssemblies().First
(
(a) =>
{
return a.GetTypes().Any
(
(t) =>
{
return (t.FullName == typeName);
}
);
}
);
}
public static Func<object, object> CreateGetPropertyValueFunc(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateGetPropertyValueFunc(type, propertyName);
}
public static Func<object, object> CreateGetPropertyValueFunc(Type type, string propertyName)
{
var target = Expression.Parameter(typeof(object), "p");
var castTarget = Expression.Convert(target, type);
var getPropertyValue = Expression.Property(castTarget, propertyName);
//Type typeProperty = typeof(object);
//if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
//{
// NullableConverter nullableConvert = new NullableConverter(type);
// type = nullableConvert.UnderlyingType;
//}
var castPropertyValue = Expression.Convert(getPropertyValue,typeof(object));
var lambda = Expression.Lambda<Func<object, object>>(castPropertyValue, target);
return lambda.Compile();
}
public static Func<object, TProperty> CreateGetPropertyValueFunc<TProperty>(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateGetPropertyValueFunc<TProperty>(type, propertyName);
}
public static Func<object, TProperty> CreateGetPropertyValueFunc<TProperty>(Type type, string propertyName)
{
var target = Expression.Parameter(typeof(object), "p");
var castTarget = Expression.Convert(target, type);
var getPropertyValue = Expression.Property(castTarget, propertyName);
var lambda = Expression.Lambda<Func<object, TProperty>>(getPropertyValue, target);
return lambda.Compile();
}
public static Func<TProperty> CreateGetStaticPropertyValueFunc<TProperty>(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateGetStaticPropertyValueFunc<TProperty>(type, propertyName);
}
public static Func<TProperty> CreateGetStaticPropertyValueFunc<TProperty>(Type type, string propertyName)
{
var property = type.GetProperty(propertyName, typeof(TProperty));
var getPropertyValue = Expression.Property(null, property);
var lambda = Expression.Lambda<Func<TProperty>>(getPropertyValue, null);
return lambda.Compile();
}
public static Func<object> CreateGetStaticPropertyValueFunc(Type type, string propertyName)
{
var property = type.GetProperty(propertyName);
var getPropertyValue = Expression.Property(null, property);
var castPropertyValue = Expression.Convert(getPropertyValue, typeof(object));
var lambda = Expression.Lambda<Func<object>>(castPropertyValue, null);
return lambda.Compile();
}
public static Func<object> CreateGetStaticPropertyValueFunc(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateGetStaticPropertyValueFunc(type, propertyName);
}
public static Action<object, object> CreateSetPropertyValueAction(Type type, string propertyName)
{
var property = type.GetProperty(propertyName);
var target = Expression.Parameter(typeof(object), "p");
var propertyValue = Expression.Parameter(typeof(object), "p1");
var castTarget = Expression.Convert(target, type);
var castPropertyValue = Expression.Convert(propertyValue, property.PropertyType);
var getSetMethod = property.GetSetMethod();
if (getSetMethod == null)
{
getSetMethod = property.GetSetMethod(true);
}
var call = Expression.Call(castTarget, getSetMethod, castPropertyValue);
var lambda = Expression.Lambda<Action<object, object>>(call, target, propertyValue);
return lambda.Compile();
}
public static Action<object, object> CreateSetPropertyValueAction(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateSetPropertyValueAction(type, propertyName);
}
public static Action<object, TProperty> CreateSetPropertyValueAction<TProperty>(Type type, string propertyName)
{
var property = type.GetProperty(propertyName);
var target = Expression.Parameter(typeof(object), "p");
var propertyValue = Expression.Parameter(typeof(TProperty), "p1");
var castTarget = Expression.Convert(target, type);
var castPropertyValue = Expression.Convert(propertyValue, property.PropertyType);
var getSetMethod = property.GetSetMethod();
if (getSetMethod == null)
{
getSetMethod = property.GetSetMethod(true);
}
var call = Expression.Call(castTarget, getSetMethod, castPropertyValue);
var lambda = Expression.Lambda<Action<object, TProperty>>(call, target, propertyValue);
return lambda.Compile();
}
public static Action<object, TProperty> CreateSetPropertyValueAction<TProperty>(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateSetPropertyValueAction<TProperty>(type, propertyName);
}
public static Action<object> CreateSetStaticPropertyValueAction(Type type, string propertyName)
{
var property = type.GetProperty(propertyName);
var propertyValue = Expression.Parameter(typeof(object), "p");
var castPropertyValue = Expression.Convert(propertyValue, property.PropertyType);
var getSetMethod = property.GetSetMethod();
if (getSetMethod == null)
{
getSetMethod = property.GetSetMethod(true);
}
var call = Expression.Call(null, getSetMethod, castPropertyValue);
var lambda = Expression.Lambda<Action<object>>(call, propertyValue);
return lambda.Compile();
}
public static Action<object> CreateSetStaticPropertyValueAction(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateSetStaticPropertyValueAction(type, propertyName);
}
public static Action<TProperty> CreateSetStaticPropertyValueAction<TProperty>(Type type, string propertyName)
{
var property = type.GetProperty(propertyName);
var propertyValue = Expression.Parameter(typeof(TProperty), "p");
//var castPropertyValue = Expression.Convert(propertyValue, property.PropertyType);
var getSetMethod = property.GetSetMethod();
if (getSetMethod == null)
{
getSetMethod = property.GetSetMethod(true);
}
var call = Expression.Call(null, getSetMethod, propertyValue);
var lambda = Expression.Lambda<Action<TProperty>>(call, propertyValue);
return lambda.Compile();
}
public static Action<TProperty> CreateSetStaticPropertyValueAction<TProperty>(string typeName, string propertyName, bool isTypeFromAssembly = false)
{
Type type;
if (isTypeFromAssembly)
{
var assembly = GetAssemblyByTypeName(typeName);
type = assembly.GetType(typeName);
}
else
{
type = Type.GetType(typeName);
}
return CreateSetStaticPropertyValueAction<TProperty>(type, propertyName);
}
}
}
namespace Microshaoft
{
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
public static class SerializerHelper
{
public static T XmlSerializerXmlToObject<T>(string Xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
T Object = XmlSerializerXmlToObject<T>(Xml, serializer);
return Object;
}
public static T XmlSerializerXmlToObject<T>(string Xml, XmlSerializer serializer)
{
StringReader stringReader = new StringReader(Xml);
XmlReader xmlReader = XmlReader.Create(stringReader);
return (T)serializer.Deserialize(xmlReader);
}
public static string XmlSerializerObjectToXml<T>
(
T Object
, XmlTextWriter writer
, XmlSerializer serializer
)
{
serializer.Serialize(writer, Object);
MemoryStream stream = writer.BaseStream as MemoryStream;
byte[] bytes = stream.ToArray();
Encoding e = EncodingHelper.IdentifyEncoding
(
bytes
, Encoding.GetEncoding("gb2312")
/// , new Encoding[]
/// {
/// Encoding.UTF8
/// , Encoding.Unicode
/// }
);
byte[] buffer = e.GetPreamble();
int offset = buffer.Length;
buffer = new byte[bytes.Length - offset];
Buffer.BlockCopy(bytes, offset, buffer, 0, buffer.Length);
string s = e.GetString(buffer);
return s;
}
public static string XmlSerializerObjectToXml<T>(T Object, XmlSerializer serializer)
{
using (MemoryStream stream = new MemoryStream())
{
Encoding e = Encoding.UTF8;
XmlTextWriter writer = new XmlTextWriter(stream, e);
string s = XmlSerializerObjectToXml<T>
(
Object
, writer
, serializer
);
writer.Close();
writer = null;
return s;
}
}
public static string XmlSerializerObjectToXml<T>(T Object, Encoding e, XmlSerializer serializer)
{
using (MemoryStream stream = new MemoryStream())
{
XmlTextWriter writer = new XmlTextWriter(stream, e);
string s = XmlSerializerObjectToXml<T>
(
Object
, writer
, serializer
);
writer.Close();
writer = null;
return s;
}
}
public static string XmlSerializerObjectToXml<T>(T Object, Encoding e)
{
using (MemoryStream stream = new MemoryStream())
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
XmlTextWriter writer = new XmlTextWriter(stream, e);
string s = XmlSerializerObjectToXml<T>
(
Object
, writer
, serializer
);
writer.Close();
writer = null;
return s;
}
}
public static string DataContractSerializerObjectToXml<T>(T Object, DataContractSerializer serializer)
{
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, Object);
byte[] buffer = StreamDataHelper.ReadDataToBytes(ms);
string xml = Encoding.UTF8.GetString(buffer);
ms.Close();
ms.Dispose();
ms = null;
return xml;
}
public static string DataContractSerializerObjectToXml<T>(T Object)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
string xml = DataContractSerializerObjectToXml<T>(Object, serializer);
return xml;
}
public static T DataContractSerializerXmlToObject<T>(string Xml, DataContractSerializer serializer)
{
byte[] buffer = Encoding.UTF8.GetBytes(Xml);
MemoryStream ms = new MemoryStream(buffer);
//ms.Position = 0;
T Object = (T)serializer.ReadObject(ms);
ms.Close();
ms.Dispose();
ms = null;
return Object;
}
public static T DataContractSerializerXmlToObject<T>(string Xml)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
byte[] buffer = Encoding.UTF8.GetBytes(Xml);
MemoryStream ms = new MemoryStream(buffer);
//ms.Position = 0;
T Object = (T)serializer.ReadObject(ms);
ms.Close();
ms.Dispose();
ms = null;
return Object;
}
public static string FormatterObjectToSoap<T>
(
T Object
)
{
using (MemoryStream stream = new MemoryStream())
{
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(stream, Object);
string soap = Encoding.UTF8.GetString(stream.GetBuffer());
return soap;
}
}
public static T FormatterSoapToObject<T>
(
string soap
)
{
using (MemoryStream stream = new MemoryStream())
{
SoapFormatter formater = new SoapFormatter();
byte[] data = Encoding.UTF8.GetBytes(soap);
stream.Write(data, 0, data.Length);
stream.Position = 0;
T Object = (T)formater.Deserialize(stream);
return Object;
}
}
public static byte[] FormatterObjectToBinary<T>
(
T Object
)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formater = new BinaryFormatter();
formater.Serialize(stream, Object);
byte[] buffer = stream.ToArray();
return buffer;
}
}
public static string DataContractSerializerObjectToJson<T>(T Object)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
string json = DataContractSerializerObjectToJson<T>(Object);
return json;
}
public static string DataContractSerializerObjectToJson<T>(T Object, DataContractJsonSerializer serializer)
{
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, Object);
string json = Encoding.UTF8.GetString(ms.GetBuffer());
ms.Close();
ms.Dispose();
ms = null;
return json;
}
public static T DataContractSerializerJsonToObject<T>(string json)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
T Object = DataContractSerializerJsonToObject<T>(json, serializer);
return Object;
}
public static T DataContractSerializerJsonToObject<T>(string json, DataContractJsonSerializer serializer)
{
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
T Object = (T)serializer.ReadObject(ms);
ms.Close();
ms.Dispose();
ms = null;
return Object;
}
}
}
namespace Microshaoft
{
using System.IO;
using System.Text;
using System.Collections.Generic;
public static class EncodingHelper
{
public static Encoding IdentifyEncoding
(
Stream stream
, Encoding defaultEncoding
, Encoding[] identifyEncodings
)
{
byte[] data = StreamDataHelper.ReadDataToBytes(stream);
return IdentifyEncoding
(
data
, defaultEncoding
, identifyEncodings
);
}
public static Encoding IdentifyEncoding
(
Stream stream
, Encoding defaultEncoding
)
{
byte[] data = StreamDataHelper.ReadDataToBytes(stream);
return IdentifyEncoding
(
data
, defaultEncoding
);
}
public static Encoding IdentifyEncoding
(
byte[] data
, Encoding defaultEncoding
)
{
EncodingInfo[] encodingInfos = Encoding.GetEncodings();
List<Encoding> list = new List<Encoding>();
foreach (EncodingInfo info in encodingInfos)
{
Encoding e = info.GetEncoding();
if (e.GetPreamble().Length > 0)
{
list.Add(e);
//System.Console.WriteLine(e.EncodingName);
}
}
Encoding[] encodings = new Encoding[list.Count];
list.CopyTo(encodings);
return IdentifyEncoding
(
data
, defaultEncoding
, encodings
);
}
public static Encoding IdentifyEncoding
(
byte[] data
, Encoding defaultEncoding
, Encoding[] identifyEncodings
)
{
Encoding encoding = defaultEncoding;
foreach (Encoding e in identifyEncodings)
{
byte[] buffer = e.GetPreamble();
int l = buffer.Length;
if (l == 0)
{
continue;
}
bool flag = false;
for (int i = 0; i < l; i++)
{
if (buffer[i] != data[i])
{
flag = true;
break;
}
}
if (flag)
{
continue;
}
else
{
encoding = e;
}
}
return encoding;
}
}
}
namespace Microshaoft
{
using System.IO;
public static class StreamDataHelper
{
public static byte[] ReadDataToBytes(Stream stream)
{
byte[] buffer = new byte[64 * 1024];
MemoryStream ms = new MemoryStream();
int r = 0;
int l = 0;
long position = -1;
if (stream.CanSeek)
{
position = stream.Position;
stream.Position = 0;
}
while (true)
{
r = stream.Read(buffer, 0, buffer.Length);
if (r > 0)
{
l += r;
ms.Write(buffer, 0, r);
}
else
{
break;
}
}
byte[] bytes = new byte[l];
ms.Position = 0;
ms.Read(bytes, 0, (int)l);
ms.Close();
ms.Dispose();
ms = null;
if (position >= 0)
{
stream.Position = position;
}
return bytes;
}
}
}
|