/// <summary>
/// 服务端:
/// </summary>
/// <param name="FileName">更新文件包名</param>
/// <param name="Offset">偏移</param>
/// <param name="Count">每次读取字节数 单位KB</param>
/// <returns>字节组</returns>
[WebMethod(Description = "<b>大文件下载</b> 测试")]
public byte[] getFile(string FileName, long Offset, int Count)
{
//指定下载文件夹+文件名
string strPath = @"E:\\" + FileName;
if (Offset < 0) { Offset = 0; }
byte[] btBuf = new byte[Count];
if (System.IO.File.Exists(strPath))
{
System.IO.FileStream fs = new System.IO.FileStream(strPath, System.IO.FileMode.Open);
if (Offset < fs.Length)
{
if (0 < (int)(fs.Length - Offset) && (int)(fs.Length - Offset) < Count)
{
Count = (int)(fs.Length - Offset);
}
btBuf=new byte[Count];
fs.Seek(Offset, System.IO.SeekOrigin.Begin);
fs.Read(btBuf, 0, Count);
}
else
{ btBuf = null; }
fs.Flush();
fs.Close();
fs.Dispose();
}
return btBuf;
}
//--------------------------------客户端调用:
private string DownLoadPath(string strClientFilePath, string fileName)
{
string result = "DownLoading...";
ws1.Service s1 = new ws1.Service();
//本地数据
System.IO.FileStream ns;
//文件保存路径
string strPath = strClientFilePath + @"\" + fileName;
//源文件名
string serverFileName = @"Enterprise.msi";
//传输数据长度,每次取字节组大小
int count = 1024 * 100;
//申请内存,存放取回的数据
byte[] buffer = new byte[count];
//文件偏移
long offset = 0;
//取回数据字节长度
int bufferSize = 1;
//-------------
while (bufferSize > 0)
{
//读取本地文件信息
ns = new System.IO.FileStream(strPath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
//获取本地数据长度,设定从服务器取数据偏移指针位置
offset = ns.Length;
//取服务端数据
buffer = s1.getFile(serverFileName, offset, count);
if (buffer!=null)
{
ns.Seek(offset, System.IO.SeekOrigin.Begin);
count = buffer.Length;
ns.Write(buffer, 0, count);
}
else
{
bufferSize = -1;
result = "Successful !";
}
ns.Flush();
ns.Close();
ns.Dispose();
}
return result;
}