nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Maximum è un Int32 quindi non puoi assegnare valori superiori ai 2 giga.
Devi assegnare un valore massimo accettabile e lavorare con le proporzioni
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ciao a tutti e scusate per la risposta in ritardo.
Non so come agire, le prove sono quelle effettuate in precedenza più di quello no so cosa fare, scusate ma non sono esperto. Sto continuando a cercare in rete ma ancora niente.
Ma non mi arrendo continuerò a cercare spero di risolvere.
Grazie a tutti per l'aiuto.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Perché scrivi nei forum se le risposte non le leggi?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Scusa perché dici che non leggo le risposte, quando ho scritto che non so come agire. Mi hai scritto che la progressbar accetta un valore int e di dare un valore accettabile, che valore devo dare?
Ultima modifica effettuata da lupetto77 il 08/07/2017 alle 16:02 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da lupetto77:
Scusa perché dici che non leggo le risposte |
Perché prima non hai detto nulla dell'indicazione che ti avevo appena dato, come se non l'avessi letta.
Mi hai scritto che la progressbar accetta un valore int |
Veramente ho detto Int32
e di dare un valore accettabile, che valore devo dare? |
Ecco, adesso stai partecipando.
Dato che è una Int32, come ti ho detto, NON puoi passare valori maggiori di 2G e quindi non puoi passare la lunghezza in byte dei file (perché potrebbero essere maggiori).
Una possibilità è
1) se il valore Maximum è minore di 2G, passi i valori così come sono (sia per Maximum sia per Value)
2) altrimenti dividi i valori Maximum e Value per 1000 (ovviamente prendi la parte intera).
In questo modo lavori fino a 2T
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ciao nessuno siccome ero e sono da cellulare per abbreviare avevo scritto int invece di int32 speravo che si capiva. Quando torno sul pc faccio delle prove e vi faro' sapere grazie per l'aiuto.
|
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ciao ho fatto questa prova:
Ho modificato cosi la funzione Copia:
Codice sorgente - presumibilmente C# / VB.NET |
/// <summary>
/// Funzione Copia Tutto
/// </summary>
/// <param name="lable1">Label su cui applicare le modifiche</param>
/// <param name="progressBar1">Progressbar su cui applicare le modifiche</param>
/// <param name="source">Cartella sorgente</param>
/// <param name="target">Cartella di destinazione</param>
public void Copia(Label label, ProgressBar progressBar1, DirectoryInfo source, DirectoryInfo target)
{
//Controllo se esiste la directory di destinazione altrimenti la creo
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}
foreach (FileInfo fi in source.GetFiles())
{
Invoke((Action)delegate
{
fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
totali += (int)fi.Length;
//copiati += (int)fi.Length;
//copiati /= 1024;
//progressBar1.Step = copiati;
//progressBar1.PerformStep();
copiati += (int)fi.Length;
if(fi.Length < 2000000000)
{
progressBar1.Step = copiati;
progressBar1.PerformStep();
}
else
{
copiati /= 1024;
//maxbytes /= 1024; //Ho provato con e senza questa riga
progressBar1.Step = copiati;
progressBar1.PerformStep();
}
label.Text = (totali / 1024).ToString() + "KB di " + maxbytes.ToString() + "KB copiati";
label.Refresh();
});
}
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
{
DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
Copia(label, progressBar1, diSourceSubDir, nextTargetSubDir);
}
}
|
Nel btnCopia ho provato cosi:
Codice sorgente - presumibilmente C++ |
//Avvio del processo private void btnCopia_Click(object sender, EventArgs e) { DirectoryInfo diSource = new DirectoryInfo(source); DirectoryInfo diTarget = new DirectoryInfo(dest); //Creo un ciclo veloce per recuperare //prima tutti i bytes totali di tutti i file contenuti //nelle cartelle e sottocartelle, la funzione è un ciclo //che man mano incrementa la variabiale maxbytes. GetSize(diSource, diTarget); maxbytes = maxbytes / 1024; //Ho provato con e senza questa riga progressBar1.Maximum = maxbytes; Thread t = new Thread(() => Copia(label2, progressBar1, diSource, diTarget)); //Copia(label4, progressBar1, diSource, diTarget); t.Start(); MessageBox.Show("Completato..."); }
|
Quando avvio il programma mostra il MessageBox e la finestra rimane bloccata fino al termine della copia dei file. Ultima modifica effettuata da lupetto77 il 12/07/2017 alle 2:23 |
|