下面是一段一次性读取读定目录中,下面的所有文件,并传送的程序,是执行正常的 private static int limitFileResponsePackageSize = 8000; //全局变量,限定单个包大小 private static void SyncFileResponseSubmit(string syncDirectory, string fileInfo, Socket socket, ref Queue<SubmitPackage> queueSubmitPackage)
{
PackageFileResponse body = null; foreach (string remoteFile in fileInfo.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries))
{
try
{
string localFile = syncDirectory + remoteFile;
if (!File.Exists(localFile))
{
continue;
}
using (FileStream stream = new FileStream(localFile, FileMode.Open, FileAccess.Read))
{
byte[] bufferCurrentPackage = new byte[stream.Length];
stream.Read(bufferCurrentPackage, 0, bufferCurrentPackage.Length);
body = new PackageFileResponse();
body.FileName = remoteFile;
body.FileInfo = bufferCurrentPackage;
PackageSubmit(socket, ref queueSubmitPackage, PackageType.SyncFileResponse, body);
} }
catch (ThreadAbortException)
{
throw;
}
catch (Exception ex)
{
Tools.TriggerNotifyEvent(DateTime.Now, "SyncProcess.SyncFileResponseSubmit()", ex.Message);
}
}
}
但当把红字读取这一段更成分段读取时(如下面的),执接收端只能得到第一个文件。 using (FileStream stream = new FileStream(localFile, FileMode.Open, FileAccess.Read))
{
int offset = 0;
int readSize = 0;
int remainSize = (int)stream.Length; limitcFileResponsePackageSize = Math.Min(limitcFileResponsePackageSize, remainSize);
byte[] bufferCurrentPackage = new byte[limitcFileResponsePackageSize];
stream.Position = offset; while ((readSize = stream.Read(bufferCurrentPackage, 0, limitcFileResponsePackageSize)) > 0)
{
body = new PackageFileResponse();
body.FileName = remoteFile;
body.FileInfo = bufferCurrentPackage;
PackageSubmit(socket, ref queueSubmitPackage, PackageType.SyncFileResponse, body); offset += readSize;
remainSize -= readSize; stream.Position = offset; limitcFileResponsePackageSize = Math.Min(limitcFileResponsePackageSize, remainSize);
bufferCurrentPackage = new byte[limitcFileResponsePackageSize];
}
}
我看了半天,也查找不出原因。谢谢!
{
PackageFileResponse body = null; foreach (string remoteFile in fileInfo.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries))
{
try
{
string localFile = syncDirectory + remoteFile;
if (!File.Exists(localFile))
{
continue;
}
using (FileStream stream = new FileStream(localFile, FileMode.Open, FileAccess.Read))
{
byte[] bufferCurrentPackage = new byte[stream.Length];
stream.Read(bufferCurrentPackage, 0, bufferCurrentPackage.Length);
body = new PackageFileResponse();
body.FileName = remoteFile;
body.FileInfo = bufferCurrentPackage;
PackageSubmit(socket, ref queueSubmitPackage, PackageType.SyncFileResponse, body);
} }
catch (ThreadAbortException)
{
throw;
}
catch (Exception ex)
{
Tools.TriggerNotifyEvent(DateTime.Now, "SyncProcess.SyncFileResponseSubmit()", ex.Message);
}
}
}
但当把红字读取这一段更成分段读取时(如下面的),执接收端只能得到第一个文件。 using (FileStream stream = new FileStream(localFile, FileMode.Open, FileAccess.Read))
{
int offset = 0;
int readSize = 0;
int remainSize = (int)stream.Length; limitcFileResponsePackageSize = Math.Min(limitcFileResponsePackageSize, remainSize);
byte[] bufferCurrentPackage = new byte[limitcFileResponsePackageSize];
stream.Position = offset; while ((readSize = stream.Read(bufferCurrentPackage, 0, limitcFileResponsePackageSize)) > 0)
{
body = new PackageFileResponse();
body.FileName = remoteFile;
body.FileInfo = bufferCurrentPackage;
PackageSubmit(socket, ref queueSubmitPackage, PackageType.SyncFileResponse, body); offset += readSize;
remainSize -= readSize; stream.Position = offset; limitcFileResponsePackageSize = Math.Min(limitcFileResponsePackageSize, remainSize);
bufferCurrentPackage = new byte[limitcFileResponsePackageSize];
}
}
我看了半天,也查找不出原因。谢谢!
//这个一次性读取成功的
using (FileStream stream = new FileStream(localFile, FileMode.Open, FileAccess.Read))
{
byte[] bufferCurrentPackage = new byte[stream.Length];
stream.Read(bufferCurrentPackage, 0, bufferCurrentPackage.Length);
body = new PackageFileResponse();
body.FileName = remoteFile;
body.FileInfo = bufferCurrentPackage;
PackageSubmit(socket, ref queueSubmitPackage, PackageType.SyncFileResponse, body);
}
//这个分段读取则接收端只能获取到第一个文件 using (FileStream stream = new FileStream(localFile, FileMode.Open, FileAccess.Read))
{
int offset = 0;
int readSize = 0;
int remainSize = (int)stream.Length; limitFileResponsePackageSize = Math.Min(limitFileResponsePackageSize, remainSize);
byte[] bufferCurrentPackage = new byte[limitFileResponsePackageSize];
stream.Position = offset; while ((readSize = stream.Read(bufferCurrentPackage, 0, limitFileResponsePackageSize)) > 0)
{
body = new PackageFileResponse();
body.FileName = remoteFile;
body.FileInfo = bufferCurrentPackage;
PackageSubmit(socket, ref queueSubmitPackage, PackageType.SyncFileResponse, body); offset += readSize;
remainSize -= readSize; stream.Position = offset; limitFileResponsePackageSize = Math.Min(limitFileResponsePackageSize, remainSize);
bufferCurrentPackage = new byte[limitFileResponsePackageSize];
}