Laden...

Wie kann ich den Kopierfortschritt in Prozent auf der Konsole anzeigen?

Erstellt von Subix vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.642 Views
S
Subix Themenstarter:in
12 Beiträge seit 2016
vor 7 Jahren
Wie kann ich den Kopierfortschritt in Prozent auf der Konsole anzeigen?

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

S
Subix Themenstarter:in
12 Beiträge seit 2016
vor 7 Jahren

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

A
350 Beiträge seit 2010
vor 7 Jahren

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

S
Subix Themenstarter:in
12 Beiträge seit 2016
vor 7 Jahren

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

3.170 Beiträge seit 2006
vor 7 Jahren

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

S
Subix Themenstarter:in
12 Beiträge seit 2016
vor 7 Jahren

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

16.806 Beiträge seit 2008
vor 7 Jahren

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

3.170 Beiträge seit 2006
vor 7 Jahren

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