【发布时间】:2014-09-15 03:02:05
【问题描述】:
我正在编写一个简单的 c# 控制台应用程序,用于将文件上传到 sftp 服务器。但是,文件量很大。我想显示上传文件的百分比,或者仅显示要上传的文件总数中已上传的文件数。
首先,我得到所有文件和文件总数。
string[] filePath = Directory.GetFiles(path, "*");
totalCount = filePath.Length;
然后我遍历文件并在foreach循环中一一上传。
foreach(string file in filePath)
{
string FileName = Path.GetFileName(file);
//copy the files
oSftp.Put(LocalDirectory + "/" + FileName, _ftpDirectory + "/" + FileName);
//Console.WriteLine("Uploading file..." + FileName);
drawTextProgressBar(0, totalCount);
}
在 foreach 循环中,我有一个进度条,但我遇到了问题。无法正常显示。
private static void drawTextProgressBar(int progress, int total)
{
//draw empty progress bar
Console.CursorLeft = 0;
Console.Write("["); //start
Console.CursorLeft = 32;
Console.Write("]"); //end
Console.CursorLeft = 1;
float onechunk = 30.0f / total;
//draw filled part
int position = 1;
for (int i = 0; i < onechunk * progress; i++)
{
Console.BackgroundColor = ConsoleColor.Gray;
Console.CursorLeft = position++;
Console.Write(" ");
}
//draw unfilled part
for (int i = position; i <= 31 ; i++)
{
Console.BackgroundColor = ConsoleColor.Green;
Console.CursorLeft = position++;
Console.Write(" ");
}
//draw totals
Console.CursorLeft = 35;
Console.BackgroundColor = ConsoleColor.Black;
Console.Write(progress.ToString() + " of " + total.ToString() + " "); //blanks at the end remove any excess
}
输出只是 [ ] 0 out of 1943
我在这里做错了什么?
编辑:
我试图在加载和导出 XML 文件时显示进度条。然而,它正在经历一个循环。完成第一轮后进入第二轮,以此类推。
string[] xmlFilePath = Directory.GetFiles(xmlFullpath, "*.xml");
Console.WriteLine("Loading XML files...");
foreach (string file in xmlFilePath)
{
for (int i = 0; i < xmlFilePath.Length; i++)
{
//ExportXml(file, styleSheet);
drawTextProgressBar(i, xmlCount);
count++;
}
}
它永远不会离开 for 循环...有什么建议吗?
【问题讨论】:
-
什么是 xmlCount 和 count?
-
计数只是递增。 xmlCount 只是指定文件夹 DirectoryInfo 中 XML 文件的总数 xmlDir = new DirectoryInfo(xmlFullpath); xmlCount = xmlDir.GetFiles().Length;
-
另外,为什么 for 循环在 foreach 循环中?它似乎在迭代同一件事。可能没有必要保留 foreach 循环。
-
您是否删除了外部 foreach 循环?将注释位更改为
ExportXml(xmlFilePath[i]) -
就是这样。我只有 for 循环,它可以工作。