[解決済み] コンソールアプリケーションのプログレスバー
2023-04-07 17:11:58
質問
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のみ
私はここで何を間違えているのでしょうか?
EDITです。
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ループから抜け出せない...何かいい方法はないでしょうか?
どのように解決するのですか?
この行はあなたの問題です。
drawTextProgressBar(0, totalCount);
繰り返しごとに進捗が0になるということですが、これはインクリメントする必要があります。代わりにforループを使うといいかもしれません。
for (int i = 0; i < filePath.length; i++)
{
string FileName = Path.GetFileName(filePath[i]);
//copy the files
oSftp.Put(LocalDirectory + "/" + FileName, _ftpDirectory + "/" + FileName);
//Console.WriteLine("Uploading file..." + FileName);
drawTextProgressBar(i, totalCount);
}
関連
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】C#で四捨五入する方法
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] Visual Studio C/C++ コンソールアプリケーションでコンソールウィンドウが閉じないようにする。
-
[解決済み] JavaScriptのコンソールでの色
-
[解決済み] .NETコンソールアプリケーションでアプリケーションのパスを取得するにはどうすればよいですか?
-
[解決済み] node.jsのコンソールのフォントカラーを変更する方法は?
-
[解決済み] C#のWindowsコンソールアプリで現在行を更新するにはどうしたらいいですか?
-
[解決済み】Node.js:末尾の改行なしでコンソールに印刷する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】C#で四捨五入する方法
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。