*********Web Services中的下载方法*********
[WebMethod(EnableSession=true)]
public byte[] Download(string FileName, int size, long offset) 
{
string tempFile = DownloadPath + "/"+ FileName;
bool IsFileExist = File.Exists(FileName);
if((offset < 0) && (!IsFileExist))
{
CustomSoapException("Cannot Find Temp File", FileName);
} byte[] buffer = new byte[size]; 
try
{
System.IO.FileStream FileStream = new System.IO.FileStream(tempFile, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
FileStream.Seek(offset, System.IO.SeekOrigin.Begin);
int bytesRead = FileStream.Read(buffer, 0, size);
FileStream.Flush();
FileStream.Close();

if(bytesRead != buffer.Length)
{
byte[] TrimmedBuffer = new byte[bytesRead];
size = bytesRead;
Array.Copy(buffer, TrimmedBuffer, bytesRead);
buffer = TrimmedBuffer;
}
if(buffer.Length == 0)
return null;
}
catch (Exception ex)
{
CustomSoapException("Read File Error", FileName);
}
return buffer;
}**********在winform中碉用*********
1.这个方法在winform的cs文件中
public void downloadProgress()
{
this.Text = Title;
PercentLabel.Text = "0 %";
TransInfo.Text = Title + " ... "; ChuckLabel.Text = "Chuck Size: " + ChuckSize.ToString() + " KB";
if(!MD5Verify)
{
MD5CheckLabel.Text = "MD5 Check: No";
}
// FileInfo fi = new FileInfo(FileName);
// StreamSize = fi.Length;
transfer = new TransferLib.DownloadTransfer();
//Todo: 
transfer.TransServer = "172.16.115.161";
transfer.eventByteTransferred += new EventHandler(OnByteTransferred);
transfer.eventStateChanged += new EventHandler(OnStateChanged);
//Generate file
//BitConverter.GetBytes 
//upload file
try
{transfer.TransStream = new FileStream(FileName, FileMode.Open,FileAccess.Write);
************这个地方有问题,我现在是下载,那原来上传的时候这里是FileAccess.Read那现在这里应该是怎么样的啊???************
}
catch (System.Exception ex)
{
MessageBox.Show("Show"+ ex);
}
transfer.StartTransferAync(MainForm.MakeSendFileName("D0001", "I0001", 10));
//transfer.StartTransferAync(this.downlaodFileName);//download时的文件名
}
*************这个是写在类库里面的
2. public void OnTransfer(string ServerFileName)
{
System.Threading.Monitor.TryEnter(this);
int reTry = 1;
try
{
TransStartTime = System.DateTime.Now;
do 
{
if(reTry > this.TransRetryTime) break; LogEx.Instance().AsynWriteLog("Start transfer file:" + ServerFileName + "(" + reTry.ToString() + ") times.", "Info");
OnTransfer(ServerFileName, TransStream, TransBytes);
reTry ++;
} while (this.TransStatus == TransferStatus.Failed);
}
catch (System.Exception e)
{
this.LastError = e;
LogEx.Instance().AsynWriteLog(e.ToString(), "Error");
}
System.Threading.Monitor.Exit(this);
}
***********OnTransfer有个子类,这里写的是下载的方法(DownloadTransfer.cs)在另一个里面写的子类是上传
public override void OnTransfer(string ServerFileName, System.IO.Stream transStream, long offset)
{
int ChuckSize = this.TransChuckSize;
byte[] buffer = new byte[ChuckSize];

while(buffer.Length == ChuckSize)
{
buffer = TransService.Download(ServerFileName, ChuckSize, offset); if(buffer == null)
break; transStream.Seek(offset, System.IO.SeekOrigin.Begin);
transStream.Write(buffer, (int)offset, buffer.Length);
offset += ChuckSize;
}
}
说实话,小弟对这个winform调用Web Services下载的方式一直不是很明白,这个程序的代码里面的上传是做好了的,我做下载想是把原来的读写方式反过来,但是我觉得不管是在客户机还是服务器不都是先读文件转字节流再写吗?那位大哥会的指点哈,小弟啊~!能qq交流最好,现在晚上不下在线等啊~~会的指点哈~!!!谢谢了~~!!