ファイルをsftpサーバーにアップロードする簡単なc#コンソールアプリを書いています。ただし、ファイルの量は多いです。アップロードするファイルの総数から、アップロードしたファイルの割合、またはすでにアップロードしたファイルの数だけを表示したいと思います。
まず、すべてのファイルとファイルの総数を取得します。
string[] filePath = Directory.GetFiles(path, "*");
totalCount = filePath.Length;
次に、ファイルをループして、foreachループで1つずつアップロードします。
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
}
出力は1943年のうちちょうど[] 0です
私はここで何が間違っているのですか?
編集:
XMLファイルのロードとエクスポート中にプログレスバーを表示しようとしています。ただし、ループを通過しています。最初のラウンドが終了すると、2番目のラウンドに進みます。
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ループを離れることはありません...何か提案はありますか?