Я пишу простое консольное приложение С #, которое загружает файлы на сервер 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 из 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 ... Есть предложения?