Hallo,
ich suche ein Möglichkeit den Kopierfortschritt von Dateien in Prozent auf der Konsole auszugeben.
Ich habe hier im Forum etwas ähnliches gefunden: CopyComponent zum Kopieren von Dateien mit Fortschritts-, Datendurchsatz-, und Restzeitberechnung
Da ich noch nicht so der Spezialist in C# bin wollte ich Fragen ob ich diese Klasse vielleicht mit ein paar kleinen Änderungen trotzdem verwenden kann, andernfalls benötige ich eure Hilfe dabei so eine Klasse für eine C# Konsolenanwendung zu finden.
Ich danke allen im Voraus
Tut mir leid ich habe den Beitrag von Abt ziemlich weit unten übersehen.
Ist sein Projekt QuickIO.NET dafür geeignet?
QuickIO.NET - Performante Dateioperationen
Hallo Subix,
Console Progressbar, hier gibt es eine Lösung für die Progressbar in einer Console
@Edit: Ja, QuickIO ist ein Framework zum kopieren von Dateien etc. Fast as Hell !
VG
Ahri
Danke für deine Antwort.
Wie kann ich die ProgressBar so einstellen, das Sie nicht nach einer Zeit weiter zählt sondern Anhand des Fortschrittes des Kopiervorgangs?
Dazu kenne ich mich zu wenig aus
Hallo,
um mal die Eingangsfrage zu beantworten:
ob ich diese Klasse vielleicht mit ein paar kleinen Änderungen trotzdem verwenden kann
Ja, kannst Du. Es sind sogar überhaupt keine Änderungen an der Klasse nötig.
Hier mal ein ganz einfaches Beispiel (schöner wäre es natürlich mit async/await):
using System;
using System.ComponentModel;
using System.Threading;
using de.myCSharp.Snippets.CopyComponent;
namespace ConsoleSample
{
class Program
{
static void Main(string[] args)
{
BackgroundWorker bw = new BackgroundWorker();
BinaryCopy bc = new BinaryCopy();
ManualResetEvent mre = new ManualResetEvent(false);
bc.BinaryCopyEvent += new BinaryCopyStepEventHandler(bc_BinaryCopyEvent);
bc.FileListCopyEvent += new FileListCopyEventHandler(bc_FileListCopyEvent);
bw.RunWorkerCompleted += delegate { mre.Set(); };
bw.DoWork += delegate
{
bc.CopyFolder(@"C:\my\source", @"C:\my\destination", false);
};
bw.RunWorkerAsync();
mre.WaitOne();
Console.ReadLine();
}
static void bc_FileListCopyEvent(object sender, FileListCopyEventArgs e)
{
Console.CursorLeft = 0;
Console.CursorTop = 1;
Console.Write("Total: {0}", e.Percent);
}
static void bc_BinaryCopyEvent(object sender, BinaryCopyStepEventArgs e)
{
Console.CursorLeft = 0;
Console.CursorTop = 0;
Console.Write("File: {0}", e.Percent);
}
}
}
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Danke.
Jedoch steht dann nur wie viele Dateien noch verbleiben.
Ich hätte gerne die genaue Angabe wie viel er prozentual schon kopiert hat und die Restzeit
Bei den Dateien handelt es sich um zip-Archive mit einer Mindestgröße von ca. 50MB bis unbegrenzt, dies ist immer unterschiedlich
Das is nur ne Dreisatzrechnung.
Bitte hab Verständnis, dass wir nicht die Programmierarbeit für Dich leisten werden, die im Detail Deinen Wünschen entspricht.
Das hier ist ein Forum für Hilfestellungen; eine Jobbörse zum Vergeben von Aufträgen haben wir jedoch ebenfalls: Jobbörse
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
Jedoch steht dann nur wie viele Dateien noch verbleiben.
Meinst Du mein Beispiel? Dann stimmt das so nicht.
Die Zahl, die hinter "File: " ausgegeben wird, ist der Fortschritt der Einzeldatei, die hinter "Total: " der Gesamtfortschritt, jeweils in Prozent.
Was die anderen Angaben betrifft, die Du haben willst, schau mal in die jeweiligen EventArgs rein, da ist schon alles drin. Du musst es nur noch ausgeben.
Ist wie gesagt nur ein kleines einfaches Beispiel, wie Du die Klasse überhaupt auf der Konsole nutzen kannst.
Gruß, MarsStein
Edit: Die Restzeit für den Gesamtfortschritt musst Du selbst berechnen (wie Abt schrieb, über Dreisatz). Das ist allerdings dann ein Wert, der zu Anfang recht ungenau ist und dann mit de rZeit sich der Realität immer weiter annähert. Wie man das auch sonst von solchen Zeitangaben kennt 😉
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca