public void MutDownLoad(BackgroundWorker worker, string localRootPath, List<FileStatus> fileList,int fileType)
{
//相同操作
bool sameOp = false;
//是否覆盖
bool IsOver = false;
//准备创建连接
Thrift.Transport.TBufferedTransport btsport = null;
ThriftHadoopFileSystem.Client thriftClient = Connect(out btsport);
if (thriftClient != null)//连接成功
{
int totalCount = fileList.Count;
int currentCount = 0;
//开始上传
worker.ReportProgress(0, new ProgressState() { ListBoxMsg = "开始下载!", totalCount = totalCount, CurrentCount = 0 });
//循环
foreach (FileStatus myfile in fileList)
{
currentCount++;
int pgPresent = (int)((double)currentCount / totalCount * 100);
string fileName = Path.GetFileName(myfile.Path);
if (myfile.Isdir == false)
{
string savePath = localRootPath + "/" + fileName;
if (fileType == 1&&myfile.FileName!=null)
{
savePath = localRootPath + "/" + myfile.FileName;
}
if (fileType == 2 && myfile.FileName != null)
{
savePath = localRootPath + "/" + myfile.FileName+"/"+fileName;
}
//显示总进度
worker.ReportProgress(pgPresent, new ProgressState() { CurrentTitle = fileName, CurrentCount = currentCount });
#region 是否存在
if (!sameOp)
{
bool exsitFile = File.Exists(savePath);
if (exsitFile)
{
SureDialog myDialog = new SureDialog();
MyShowDialogResult myDR = new MyShowDialogResult();
myDialog.ShowDialog(fileName, myDR);
sameOp = myDR.IsCheck;
IsOver = myDR.Result;
if (!myDR.Result)
{
worker.ReportProgress(pgPresent, new ProgressState() { ListBoxMsg = fileName + " 跳过 " });
continue;
}
}
}
else
{
bool exsitFile = File.Exists(savePath);
if (exsitFile)
{
if (!IsOver)
{
worker.ReportProgress(pgPresent, new ProgressState() { ListBoxMsg = fileName + "跳过 " });
continue;
}
}
}
#endregion
#region 单个下载
bool result = false;
ThriftHandle th = thriftClient.open(new Pathname() { pathname = myfile.Path });
// 创建文件流
FileStream fs = new FileStream(savePath, FileMode.Create, FileAccess.Write);
long totalBytes = 0;
int readLength = 1024 * 1024;
try
{
UTF8Encoding utf8 = new UTF8Encoding(false, true);
while (true)
{
int needRead = readLength;
if (myfile.Length - totalBytes < readLength)
{
needRead = (int)(myfile.Length - totalBytes);
}
if (needRead <= 0)
break;
byte[] fileBuffer = thriftClient.read(th, totalBytes, needRead);
byte[] myfileBuffer = Encoding.Convert(utf8, Encoding.GetEncoding("iso-8859-1"), fileBuffer);
totalBytes += needRead;
fs.Write(myfileBuffer, 0, myfileBuffer.Length);
//显示单个上传进度
int mypresent = (int)((double)totalBytes / myfile.Length * 100);
worker.ReportProgress(pgPresent, new ProgressState() { CurrentTitle = mypresent + "% " + fileName });
}
result = true;
}
catch (Exception ee)
{
throw ee;
}
finally
{
fs.Dispose();
if (thriftClient != null)
thriftClient.close(th);
}
#endregion
string msg = string.Format("{0} 下载{1}", Path.GetFileName(fileName), result ? "成功" : "失败");
worker.ReportProgress(pgPresent, new ProgressState() { ListBoxMsg = msg });
}
else
{
worker.ReportProgress(pgPresent, new ProgressState() { ListBoxMsg = fileName+"不是文件!"});
}
}
}
//释放连接
if (btsport != null)
{
btsport.Close();
}
}