public void Add(TransferFileDataObj item) { PCClientFilesBlocksQueue.Enqueue(item); Interlocked.Increment(ref queueLength); //if (RunFlag) //{ // ThreadPool.QueueUserWorkItem(new WaitCallback(NewThreadFunc)); //} //if (RunFlag) //{ lock (lockerRunFlag) { if (sendFileThread == null) { sendFileThread = new Thread(new ThreadStart(NewThreadFunc)); sendFileThread.IsBackground = true; sendFileThread.Start(); } } //} //if (RunFlag) //{ // ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod); // Thread myThread = new Thread(ParStart); // myThread.IsBackground = true; // object o = myThread; // myThread.Start(o); //} }
public void Add(TransferFileDataObj item) { //ServerFilesBlocksQueue.Enqueue(item); ServerFilesBlocksBag.Add(item); Interlocked.Increment(ref queueLength); //if (RunFlag) //{ // ThreadPool.QueueUserWorkItem(new WaitCallback(NewThreadFunc)); //} lock (lockerRunFlag) { if (item.Order_Num == 1) { ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod); Thread myThread = new Thread(ParStart); myThread.IsBackground = true; FileThreadPramObj o = new FileThreadPramObj(); o.guId = item.guId; o.myThread = myThread; myThread.Start(o); } } //if (RunFlag) //{ // writeFileThread = new Thread(new ThreadStart(NewThreadFunc)); // writeFileThread.IsBackground = true; // writeFileThread.Start(); //} }
private static void NewThreadFunc(Thread ParObject) { RunFlag = false; while (!RunFlag) { TransferFileDataObj item = null; if (PCClientFilesBlocksQueue.TryPeek(out item)) { if (item != null) { if (FileTransferClient.ClientSendFileDataBlock(item)) { TransferFileDataObj block = null; if (PCClientFilesBlocksQueue.TryDequeue(out block)) { Interlocked.Decrement(ref queueLength); TransferSendFileObj fileObj = new TransferSendFileObj(); FilesQueue.Instance.Get(block.guId, out fileObj); if (fileObj != null && block != null) { fileObj.SendSize = fileObj.SendSize + block.FileData.Length; if (item.Order_Num == 1) { fileObj.Status = SendFileStatus.StartSend; } else { fileObj.Status = SendFileStatus.Sending; } if (fileObj.FileSize == fileObj.SendSize) { fileObj.Status = SendFileStatus.SendEnd; } FilesQueue.Instance.Add(block.guId, fileObj); TransferSendFileObj2 fileObj2 = new TransferSendFileObj2(); fileObj2.BlockNum = item.Order_Num; fileObj2.DataBlockCount = fileObj.DataBlockCount; fileObj2.FileName = fileObj.FileName; fileObj2.FilePath = fileObj.FilePath; fileObj2.FileSize = fileObj.FileSize; fileObj2.ReadSize = fileObj.ReadSize; fileObj2.SendSize = fileObj.SendSize; fileObj2.serverDir = fileObj.serverDir; fileObj2.Status = fileObj.Status; FileTransferClient.UpLoadFileMsg(new UpLoadFileEventArgs(block.guId, fileObj2)); } } } } } } //RunFlag = true; ////Utility.Log.Log.writeLineToLog("发送线程终止000:" , "Send"); ////Thread.Sleep(3000); //ParObject.Abort(); //ParObject = null; }
//FileStream fsWriteAppend = null; private void WriteRestFile(string guId, TransferReceiveFileObj fileObj0, TransferFileDataObj block0, Thread myThread) { FileStream fsWriteAppend = null; for (int i = 0; i < ServerFilesBlocksBag.Count; i++) { TransferFileDataObj block = ServerFilesBlocksBag.ElementAt <TransferFileDataObj>(i); if (block0.Order_Num != fileObj0.NextDataBlockNum) { return; } if (guId != block.guId) { return; } if (!Directory.Exists(Instance.SavePath)) //存放的默认文件夹是否存在 { Directory.CreateDirectory(Instance.SavePath); //不存在则创建 } string fileFullPath = Path.Combine(Instance.SavePath + fileObj0.serverDir, fileObj0.FileName); //合并路径生成文件存放路径 //创建文件流,读取流中的数据生成文件 //lock (SynWriteObject) //{ //fsWriteAppend.Lock( if (fsWriteAppend == null) { fsWriteAppend = new FileStream(fileFullPath, FileMode.Append, FileAccess.Write, FileShare.Write); } //else { //} // Utility.Log.Log.writeLineToLog("写入文件:" + block.Order_Num.ToString(), "Write" + guId); fsWriteAppend.Seek((block.Order_Num - 1) * 32768, SeekOrigin.Begin); fsWriteAppend.Write(block.FileData, 0, block.CanReadLength); fsWriteAppend.Close(); fsWriteAppend.Dispose(); //} fileObj0.Status = ReceiveFileStatus.Writing; if (block.EndFlag) { //Utility.Log.Log.writeLineToLog("写入文件--尾块:" + block.Order_Num.ToString(), "Write" + guId); fileObj0.Status = ReceiveFileStatus.WriteEnd; //Utility.Log.Log.writeLineToLog("写入线程终止--Rest点:" + block.Order_Num.ToString(), "Write" + guId); Thread.Sleep(300); myThread.Abort(); myThread = null; } fileObj0.WriteSize = fileObj0.WriteSize + block.FileData.Length;; fileObj0.NextDataBlockNum = fileObj0.NextDataBlockNum + 1; FilesQueue.Add(guId, fileObj0); //ServerFilesBlocksQueue.TryDequeue(out block); ServerFilesBlocksBag.TryTake(out block); //Thread.Sleep(50); } }
public string ReceiveFile(byte[] fileDataArry, int CanReadLength, string path, string fileName, int Order_Num, string guId, string serverDir, long fileSize, bool EndFlag, int DataBlockCount, string UserID, string PCClientCookieStr) { if (!SessionCookie.CheckPCClientCookieStr(UserID, PCClientCookieStr)) { return("Session Error"); } string result = string.Empty; result = "false"; TransferReceiveFileObj fileObj0 = new TransferReceiveFileObj(); if (!FilesQueue.Get(guId, out fileObj0)) { fileObj0 = new TransferReceiveFileObj(); fileObj0.guId = guId; fileObj0.FileName = fileName; fileObj0.FilePath = path; fileObj0.FileSize = fileSize; fileObj0.ReceiveSize = 0; fileObj0.Status = ReceiveFileStatus.StartReceive; fileObj0.DataBlockCount = DataBlockCount; fileObj0.serverDir = serverDir; fileObj0.NextDataBlockNum = 1; FilesQueue.Add(guId, fileObj0); } //int len = fileDataArry.Length; TransferFileDataObj fileBlock = new TransferFileDataObj(); fileBlock.guId = guId; Array.Copy(fileDataArry, fileBlock.FileData, CanReadLength); fileBlock.CanReadLength = CanReadLength; fileBlock.FilePath = path; fileBlock.Order_Num = Order_Num; FilesBlocksQueue.Instance.Add(fileBlock); if (!EndFlag) { //Utility.Log.Log.writeLineToLog("接收文件--入队列:" + Order_Num.ToString(), "Receive"); } FilesQueue.Get(guId, out fileObj0); if (EndFlag) { fileObj0.Status = ReceiveFileStatus.ReceiveEnd; //Utility.Log.Log.writeLineToLog("接收文件--尾块入队列:" + Order_Num.ToString(), "Receive"); } else { if (fileObj0.Status == ReceiveFileStatus.StartReceive) { fileObj0.Status = ReceiveFileStatus.Receiving; } } fileObj0.ReceiveSize = fileObj0.ReceiveSize + CanReadLength; FilesQueue.Add(guId, fileObj0); result = "true"; return(result); }
private static void NewThreadFunc() { //RunFlag = false; while (true) { TransferFileDataObj item = null; if (PCClientFilesBlocksQueue.TryPeek(out item)) { if (item != null) { if (FileTransferClient.ClientSendFileDataBlock(item)) { TransferFileDataObj block = null; if (PCClientFilesBlocksQueue.TryDequeue(out block)) { Interlocked.Decrement(ref queueLength); TransferSendFileObj fileObj = new TransferSendFileObj(); FilesQueue.Instance.Get(block.guId, out fileObj); if (fileObj != null && block != null) { fileObj.SendSize = fileObj.SendSize + block.CanReadLength; if (item.Order_Num == 1) { fileObj.Status = SendFileStatus.StartSend; } else { fileObj.Status = SendFileStatus.Sending; } if (fileObj.FileSize == fileObj.SendSize) { fileObj.Status = SendFileStatus.SendEnd; } FilesQueue.Instance.Add(block.guId, fileObj); TransferSendFileObj2 fileObj2 = new TransferSendFileObj2(); fileObj2.BlockNum = item.Order_Num; fileObj2.DataBlockCount = fileObj.DataBlockCount; fileObj2.FileName = fileObj.FileName; fileObj2.FilePath = fileObj.FilePath; fileObj2.FileSize = fileObj.FileSize; fileObj2.ReadSize = fileObj.ReadSize; fileObj2.SendSize = fileObj.SendSize; fileObj2.serverDir = fileObj.serverDir; fileObj2.Status = fileObj.Status; FileTransferClient.UpLoadFileMsg(new UpLoadFileEventArgs(block.guId, fileObj2)); } } } } } } }
//private static void loadData(string path, string fileName, string guId) //{ // DownLoadFileDataObj obj = new DownLoadFileDataObj(); // if (GlobalStaticObj.Instance.proxyFile.GetSucDataBlock(guId)) // { // DownLoadFileOoj_Client fileObj = new DownLoadFileOoj_Client(); // fileObj.FileName = fileName; // fileObj.guId = guId; // fileObj.DownLoadStatus = GetFileDownLoadStatus.StartDownLoad; // fileObj.DownLoadSize = 0; // DownLoadFilesQueue.Instance.Add(guId, fileObj); // DownLoadFileMsg(new DownLoadFileEventArgs(guId,fileObj)); // getFileDataBlocks(path, fileName, guId, out obj); // if (!obj.EndFlag) // { // loadData(path, fileName, guId); // } // else // { // DownLoadFileOoj_Client fileObj0 = new DownLoadFileOoj_Client(); // fileObj0.FileName = fileName; // fileObj0.guId = guId; // fileObj0.DownLoadStatus = GetFileDownLoadStatus.DownLoadEnd; // DownLoadFilesQueue.Instance.Add(guId, fileObj0); // DownLoadFileMsg(new DownLoadFileEventArgs(guId,fileObj0)); // return; // } // } // else { // loadData(path, fileName, guId); // } //} // private static void getFileDataBlocks(string path, string fileName, string guId, out DownLoadFileDataObj obj0) //{ // string resultStr = GlobalStaticObj.Instance.proxyFile.DownLoadFileDataBlock(path, fileName, guId); // DownLoadFileDataObj obj = JsonConvert.DeserializeObject<DownLoadFileDataObj>(resultStr); // if (!string.IsNullOrEmpty(resultStr)) // { // obj0 = obj; // DownLoadFilesBlocksQueue.Instance.Add(obj); // DownLoadFileOoj_Client fileObj0 = new DownLoadFileOoj_Client(); // fileObj0.FileName = fileName; // fileObj0.guId = guId; // fileObj0.DownLoadStatus = GetFileDownLoadStatus.DownLoadEnd; // fileObj0.DownLoadSize = fileObj0.DownLoadSize + obj.FileData.Length; // DownLoadFilesQueue.Instance.Add(guId, fileObj0); // DownLoadFileMsg(new DownLoadFileEventArgs(guId,fileObj0)); // } // if(obj.EndFlag) // { // obj0 = obj; // DownLoadFileOoj_Client fileObj0 = new DownLoadFileOoj_Client(); // fileObj0.FileName = fileName; // fileObj0.guId = guId; // fileObj0.DownLoadStatus = GetFileDownLoadStatus.DownLoadEnd; // fileObj0.DownLoadSize = fileObj0.DownLoadSize + obj.FileData.Length; // DownLoadFilesQueue.Instance.Add(guId, fileObj0); // DownLoadFileMsg(new DownLoadFileEventArgs(guId, fileObj0)); // return; // } // getFileDataBlocks(path,fileName,guId,out obj0); //} //private static void getFileDataBlocks(string guId) //{ // string resultStr = GlobalStaticObj.Instance.proxyFile.DownLoadFileDataBlock(guId); // DownLoadFileDataObj obj = JsonConvert.DeserializeObject<DownLoadFileDataObj>(resultStr); // if (!string.IsNullOrEmpty(resultStr)) // { // DownLoadFileOoj_Client fileObj0 = new DownLoadFileOoj_Client(); // DownLoadFilesQueue.Instance.Get(obj.guId, out fileObj0); // DownLoadFilesBlocksQueue.Instance.Add(obj); // fileObj0.DownLoadStatus = GetFileDownLoadStatus.DownLoadEnd; // fileObj0.DownLoadSize = fileObj0.DownLoadSize + obj.FileData.Length; // DownLoadFilesQueue.Instance.Add(guId, fileObj0); // DownLoadFileMsg(new DownLoadFileEventArgs(guId, fileObj0)); // } // if (obj.EndFlag) // { // obj0 = obj; // DownLoadFileOoj_Client fileObj0 = new DownLoadFileOoj_Client(); // fileObj0.FileName = fileName; // fileObj0.guId = guId; // fileObj0.DownLoadStatus = GetFileDownLoadStatus.DownLoadEnd; // fileObj0.DownLoadSize = fileObj0.DownLoadSize + obj.FileData.Length; // DownLoadFilesQueue.Instance.Add(guId, fileObj0); // DownLoadFileMsg(new DownLoadFileEventArgs(guId, fileObj0)); // return; // } // getFileDataBlocks(path, fileName, guId, out obj0); //} public static bool ClientSendFileDataBlock(TransferFileDataObj item) { bool result = false; if (WCFClientProxy.TestPCClientProxy()) { TransferSendFileObj fileObj = new TransferSendFileObj(); FilesQueue.Instance.Get(item.guId, out fileObj); string resultStr = GlobalStaticObj.Instance.proxyFile.ReceiveFile(item.FileData, item.CanReadLength, item.FilePath, item.FileName, item.Order_Num, item.guId, fileObj.serverDir, fileObj.FileSize, item.EndFlag, fileObj.DataBlockCount, UserId, PCClientCookieStr); bool.TryParse(resultStr, out result); if (FilesBlocksQueue.PCClientFilesBlocksQueue.IsEmpty) { FilesBlocksQueue.RunFlag = true; //Utility.Log.Log.writeLineToLog("发送线程终止:" + item.Order_Num.ToString() + " 结果:" + result.ToString(), "Send"); } //Utility.Log.Log.writeLineToLog("发送文件块:" + item.Order_Num.ToString() + " 结果:" + result.ToString(), "Send"); } return(result); }
//FileStream fsWriteNew = null; private void WriteNewFile(string guId, TransferReceiveFileObj fileObj0, TransferFileDataObj block, Thread myThread) { if (!Directory.Exists(Path.Combine(Instance.SavePath + fileObj0.serverDir))) //存放的默认文件夹是否存在 { Directory.CreateDirectory(Path.Combine(Instance.SavePath + fileObj0.serverDir)); //不存在则创建 } string fileFullPath = Path.Combine(Instance.SavePath + fileObj0.serverDir, fileObj0.FileName); //合并路径生成文件存放路径 //创建文件流,读取流中的数据生成文件 int offset = 0; //lock (SynWriteObject) //{ //if (fsWriteNew == null) //{ FileStream fsWriteNew = new FileStream(fileFullPath, FileMode.Create, FileAccess.Write, FileShare.Write); //} //Utility.Log.Log.writeLineToLog("开始写入文件:" + block.Order_Num.ToString(), "Write" + guId); fsWriteNew.Seek(0, SeekOrigin.Begin); fsWriteNew.Write(block.FileData, 0, block.CanReadLength); fsWriteNew.Close(); fsWriteNew.Dispose(); //} offset = offset + block.FileData.Length; fileObj0.Status = ReceiveFileStatus.StartWrite; if (block.EndFlag) { //Utility.Log.Log.writeLineToLog("写入文件--尾块:" + block.Order_Num.ToString(), "Write" + guId); fileObj0.Status = ReceiveFileStatus.WriteEnd; //Utility.Log.Log.writeLineToLog("写入线程终止--New点:" + block.Order_Num.ToString(), "Write" + guId); Thread.Sleep(300); myThread.Abort(); myThread = null; } fileObj0.WriteSize = offset; fileObj0.NextDataBlockNum = 2; FilesQueue.Add(guId, fileObj0); //ServerFilesBlocksQueue.TryDequeue(out block); ServerFilesBlocksBag.TryTake(out block); }
private void WriteFile2(string guId, TransferReceiveFileObj fileObj0, Thread myThread) { FileStream fsWrite = null; long fileSize = 0; bool firstWrite = true; TransferReceiveFileObj fileObjAim = fileObj0; while (true) { start: if (!firstWrite) { TransferReceiveFileObj fileObj1 = new TransferReceiveFileObj(); FilesQueue.Get(guId, out fileObj1); fileObjAim = fileObj1; if ((System.DateTime.Now - fileObjAim.writeTime).TotalMinutes > 3)//写入等待超时3分钟 { if (fsWrite != null) { fsWrite.Close(); fsWrite.Dispose(); } //Utility.Log.Log.writeLineToLog("写入文件--尾块:" + block.Order_Num.ToString(), "Write" + guId); fileObjAim.Status = ReceiveFileStatus.WriteWaitTimeOut; FilesQueue.Add(guId, fileObjAim); //Utility.Log.Log.writeLineToLog("写入线程终止--Rest点:" + block.Order_Num.ToString(), "Write" + guId); Thread.Sleep(300); myThread.Abort(); myThread = null; } } for (int i = 0; i < ServerFilesBlocksBag.Count; i++) { TransferFileDataObj block = ServerFilesBlocksBag.ElementAt <TransferFileDataObj>(i); if (block.Order_Num != fileObjAim.NextDataBlockNum) { return; } if (guId != block.guId) { return; } if (!Directory.Exists(Instance.SavePath)) //存放的默认文件夹是否存在 { Directory.CreateDirectory(Instance.SavePath); //不存在则创建 } string fileFullPath = Path.Combine(Instance.SavePath + fileObjAim.serverDir, fileObjAim.FileName); //合并路径生成文件存放路径 //创建文件流,读取流中的数据生成文件 //lock (SynWriteObject) //{ //fsWriteAppend.Lock( if (fsWrite == null) { if (block.Order_Num == 1) { fsWrite = new FileStream(fileFullPath, FileMode.Create, FileAccess.Write, FileShare.Write); firstWrite = false; } else { fsWrite = new FileStream(fileFullPath, FileMode.Append, FileAccess.Write, FileShare.Write); } } //else { //} // Utility.Log.Log.writeLineToLog("写入文件:" + block.Order_Num.ToString(), "Write" + guId); //fsWrite.Seek((block.Order_Num - 1) * 32768, SeekOrigin.Begin); //if (block.Order_Num == 1) //{ // fsWrite.Seek(0, SeekOrigin.Begin); //} //else { // fsWrite.Seek(0, SeekOrigin.End); //} fsWrite.Write(block.FileData, 0, block.CanReadLength); fileSize = fileSize + block.CanReadLength; //} fileObjAim.Status = ReceiveFileStatus.Writing; fileObjAim.writeTime = System.DateTime.Now; if (fileSize == fileObjAim.FileSize)//完整写入 { fsWrite.Close(); fsWrite.Dispose(); //Utility.Log.Log.writeLineToLog("写入文件--尾块:" + block.Order_Num.ToString(), "Write" + guId); fileObjAim.Status = ReceiveFileStatus.WriteEnd; //Utility.Log.Log.writeLineToLog("写入线程终止--Rest点:" + block.Order_Num.ToString(), "Write" + guId); Thread.Sleep(300); myThread.Abort(); myThread = null; } fileObjAim.WriteSize = fileObjAim.WriteSize + block.FileData.Length;; fileObjAim.NextDataBlockNum = fileObjAim.NextDataBlockNum + 1; FilesQueue.Add(guId, fileObjAim); //ServerFilesBlocksQueue.TryDequeue(out block); ServerFilesBlocksBag.TryTake(out block); //Thread.Sleep(50); } goto start; } }
private static void WriteRestFile(string guId, TransferReceiveFileObj fileObj0, TransferFileDataObj block) { if (block.Order_Num != fileObj0.NextDataBlockNum) { return; } if (!Directory.Exists(Instance.SavePath)) //存放的默认文件夹是否存在 { Directory.CreateDirectory(Instance.SavePath); //不存在则创建 } string fileFullPath = Path.Combine(Instance.SavePath + fileObj0.serverDir, fileObj0.FileName); //合并路径生成文件存放路径 //创建文件流,读取流中的数据生成文件 //lock (SynWriteObject) //{ FileStream fs = new FileStream(fileFullPath, FileMode.Append, FileAccess.Write, FileShare.Write); //Utility.Log.Log.writeLineToLog("写入文件:" + block.Order_Num.ToString(), "Write" + guId); fs.Write(block.FileData, 0, block.CanReadLength); fs.Close(); fs.Dispose(); //} fileObj0.Status = ReceiveFileStatus.Writing; if (block.EndFlag) { //Utility.Log.Log.writeLineToLog("写入文件--尾块:" + block.Order_Num.ToString(), "Write" + guId); fileObj0.Status = ReceiveFileStatus.WriteEnd; } fileObj0.WriteSize = fileObj0.WriteSize + block.FileData.Length;; fileObj0.NextDataBlockNum = fileObj0.NextDataBlockNum + 1; FilesQueue.Add(guId, fileObj0); //ServerFilesBlocksQueue.TryDequeue(out block); ServerFilesBlocksBag.TryTake(out block); }
public bool Remove(out TransferFileDataObj obj) { //return ServerFilesBlocksQueue.TryDequeue(out obj); return(ServerFilesBlocksBag.TryTake(out obj)); }
public bool Get(out TransferFileDataObj obj) { //return ServerFilesBlocksQueue.TryPeek(out obj); return(ServerFilesBlocksBag.TryPeek(out obj)); }
public static void SafeReadFile(Stream stream, string guId, string FileName, string FilePath) { int bufferLength = 32768; //文件数据块编号 int _order_Num = 0; //初始化一个32k的缓存 //byte[] buffer = new byte[32768]; byte[] buffer = new byte[bufferLength]; int byteLength = 0; int read = 0; int block; //每次从流中读取缓存大小的数据,知道读取完所有的流为止 TransferSendFileObj fileObj0 = new TransferSendFileObj(); FilesQueue.Instance.Get(guId, out fileObj0); fileObj0.Status = SendFileStatus.Reading; FilesQueue.Instance.Add(guId, fileObj0); //Utility.Log.Log.writeLineToLog("开始读取文件","Read"); while ((block = stream.Read(buffer, 0, buffer.Length)) > 0) { byteLength = byteLength + block; //重新设定读取位置 read += block; _order_Num = _order_Num + 1; //检查是否到达了缓存的边界,检查是否还有可以读取的信息 if (block == buffer.Length) { //压入文件块传输缓存队列 TransferFileDataObj fileBlock = new TransferFileDataObj(); fileBlock.guId = guId; Array.Copy(buffer, fileBlock.FileData, buffer.Length); fileBlock.FilePath = FilePath; fileBlock.Order_Num = _order_Num; fileBlock.FileName = FileName; fileBlock.CanReadLength = bufferLength; FilesBlocksQueue.Instance.Add(fileBlock); //Utility.Log.Log.writeLineToLog("读取文件块入队列:" + _order_Num.ToString(), "Read"); FilesQueue.Instance.Get(guId, out fileObj0); fileObj0.ReadSize = fileObj0.ReadSize + block; fileObj0.Status = SendFileStatus.Reading; // 尝试读取一个字节 int nextByte = stream.ReadByte(); // 读取失败则说明读取完成可以返回结果 if (nextByte == -1) { fileBlock.EndFlag = true; //FilesQueue.Instance.Get(guId, out fileObj0); fileObj0.Status = SendFileStatus.ReadEnd; FilesQueue.Instance.Add(guId, fileObj0); TransferSendFileObj2 fileObj2 = new TransferSendFileObj2(); fileObj2.BlockNum = _order_Num; fileObj2.DataBlockCount = _order_Num; fileObj2.FileName = fileObj0.FileName; fileObj2.FilePath = fileObj0.FilePath; fileObj2.FileSize = fileObj0.FileSize; fileObj2.ReadSize = fileObj0.ReadSize; fileObj2.SendSize = fileObj0.SendSize; fileObj2.serverDir = fileObj0.serverDir; fileObj2.Status = fileObj0.Status; UpLoadFileMsg(new UpLoadFileEventArgs(guId, fileObj2)); } else { fileBlock.EndFlag = false; fileObj0.Status = SendFileStatus.Reading; TransferSendFileObj2 fileObj2 = new TransferSendFileObj2(); fileObj2.BlockNum = _order_Num; fileObj2.DataBlockCount = 0; fileObj2.FileName = fileObj0.FileName; fileObj2.FilePath = fileObj0.FilePath; fileObj2.FileSize = fileObj0.FileSize; fileObj2.ReadSize = fileObj0.ReadSize; fileObj2.SendSize = fileObj0.SendSize; fileObj2.serverDir = fileObj0.serverDir; fileObj2.Status = fileObj0.Status; UpLoadFileMsg(new UpLoadFileEventArgs(guId, fileObj2)); } FilesQueue.Instance.Add(guId, fileObj0); stream.Seek(-1, SeekOrigin.Current); //清空缓存区 Array.Clear(buffer, 0, buffer.Length); byteLength = 0; } } //压入文件块传输缓存队列 TransferFileDataObj fileBlockEnd = new TransferFileDataObj(); fileBlockEnd.guId = guId; Array.Copy(buffer, fileBlockEnd.FileData, byteLength); fileBlockEnd.FilePath = FilePath; fileBlockEnd.CanReadLength = byteLength; fileBlockEnd.Order_Num = _order_Num; fileBlockEnd.FileName = FileName; fileBlockEnd.EndFlag = true; FilesBlocksQueue.Instance.Add(fileBlockEnd); //Utility.Log.Log.writeLineToLog("读取文件--尾块入队列:" + _order_Num.ToString(), "Read"); //更新Files队列中,对应File的ReadSize FilesQueue.Instance.Get(guId, out fileObj0); fileObj0.ReadSize = fileObj0.ReadSize + byteLength; fileObj0.Status = SendFileStatus.ReadEnd; fileObj0.DataBlockCount = fileBlockEnd.Order_Num; FilesQueue.Instance.Add(guId, fileObj0); TransferSendFileObj2 fileObj3 = new TransferSendFileObj2(); fileObj3.BlockNum = _order_Num; fileObj3.DataBlockCount = 0; fileObj3.FileName = fileObj0.FileName; fileObj3.FilePath = fileObj0.FilePath; fileObj3.FileSize = fileObj0.FileSize; fileObj3.ReadSize = fileObj0.ReadSize; fileObj3.SendSize = fileObj0.SendSize; fileObj3.serverDir = fileObj0.serverDir; fileObj3.Status = fileObj0.Status; UpLoadFileMsg(new UpLoadFileEventArgs(guId, fileObj3)); //清空缓存区 Array.Clear(buffer, 0, buffer.Length); }