Autor Beitrag
KWR1995
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18

Win 7
Delphi 4, C# Express
BeitragVerfasst: Di 07.01.14 20:21 
Ok jetzt habe ich nur noch ein Problem.
Mein Programm soll zudem noch Daten kopieren mit Progressbar, das funktioniert auch soweit, nur wenn die Daten Menge fast 10 Gb erreicht zeigt die Progressbar keine Werte mehr an, also steht bei 100 % und das label schreibt Minus Werte.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace LAN_Party_Game_Installer
{
    public partial class Form4 : Form
    {
        int maxbytes = 0;
        int copied = 0;
        int total = 0;

        public Form4()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            {
                string quell = textBox1.Text;
                string user = textBox2.Text;
                Copy1(@quell + ":\\LAN-Party-Games\\Userdata\\Command & Conquer 3 Tiberium Wars"@"C:\users\" + @user + "\\Appdata\\Roaming\\Command & Conquer 3 Tiberium Wars");



                MessageBox.Show("Done");
                button2.Visible = true;

            }
        }
        public void Copy1(string sourceDirectory, string targetDirectory)
        {

            DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
            DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);
            //Gets size of all files present in source folder.
            GetSize(diSource, diTarget);
            maxbytes = maxbytes / 1024;

            progressBar1.Maximum = maxbytes;
            CopyAll(diSource, diTarget);
        }
        public void CopyAll(DirectoryInfo source, DirectoryInfo target)
        {

            if (Directory.Exists(target.FullName) == false)
            {
                Directory.CreateDirectory(target.FullName);
            }
            foreach (FileInfo fi in source.GetFiles())
            {

                fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);

                total += (int)fi.Length;

                copied += (int)fi.Length;
                copied /= 1024;
                progressBar1.Step = copied;

                progressBar1.PerformStep();
                label1.Text = (total / 1048576).ToString() + "MB of " + (maxbytes / 1024).ToString() + "MB copied";



                label1.Refresh();
            }
            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {



                DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
                CopyAll(diSourceSubDir, nextTargetSubDir);
            }
        }

        public void GetSize(DirectoryInfo source, DirectoryInfo target)
        {


            if (Directory.Exists(target.FullName) == false)
            {
                Directory.CreateDirectory(target.FullName);
            }
            foreach (FileInfo fi in source.GetFiles())
            {
                maxbytes += (int)fi.Length;//Size of File


            }
            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {
                DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
                GetSize(diSourceSubDir, nextTargetSubDir);


            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form5 form5 = new Form5();
            form5.Show();
            Hide();
        }
    }
}


MfG.: KWR1995
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 07.01.14 21:04 
Hallo,

der Datentyp int entspricht System.Int32, d.h. dieser kann nur 2^32 (~ 4,3GB) verschiedene Werte annehmen. Nimm daher den größeren Datentyp long (System.int64) - dann entfällt auch der Cast bei FileInfo.Length.

Und für die ProgressBar nimm z.B. den Wert in KB (oder MB), d.h. teile durch 1024 (wie du es ja schon bei der Variable copied gemacht hast).

Für diesen Beitrag haben gedankt: KWR1995
KWR1995 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18

Win 7
Delphi 4, C# Express
BeitragVerfasst: Di 07.01.14 21:29 
Kann man long irgendwie in int konvertieren?
Oder wie könnte ich progressBar1.Maximum = maxbytes setzten, obwohl maxbytes long ist aber progressBar1.Maximum int benötigt?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 07.01.14 22:15 
ausblenden C#-Quelltext
1:
progressBar1.Maximum = (int)maxbytes;					

oder besser
ausblenden C#-Quelltext
1:
progressBar1.Maximum = Convert.ToInt32(maxbytes);					

Am allerbesten wäre aber Afaik wenn du dich an Dreisatz erinnerst und das Maximum auf einen konstanten Wert setzt zum Beispiel deine ProgressBar von 0 bis 100 darstellen läßt. Dann den tatsächlichen aktuellen Wert relativ zum Maximum auf einen Wert eben von eben 0 bis 100 normieren und es ist egal wie groß der tatsächliche Wert ist er wird immer in einen int passen.

Für diesen Beitrag haben gedankt: KWR1995
KWR1995 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18

Win 7
Delphi 4, C# Express
BeitragVerfasst: Mi 08.01.14 19:17 
Danke, dass hat das Problem gelöst! ;-)