begin process at 2010 02 09 22:58:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Système

 > 

Fichier & Disque

 > 

Calculer le temps restant dans une copie de fichiers


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Calculer le temps restant dans une copie de fichiers

mardi 19 décembre 2006 à 13:10:02 | Calculer le temps restant dans une copie de fichiers

Siteauludo

Bonjour,

J'ai fait un petit programme de backup et j'ai un léger problème : Je souhaite pouvoir afficher le temps restant  (en gros bien sûr, comme pour les boîtes de dialogues de copie de fichiers de windows xp) avant la fin de la sauvegarde.

En théorie, je calcule très précisément le temps de copie d'un fichier, et je fais :

(Durée / TailleFichier) * TailleTotaleDeLaSauvegarde

ça marche plutôt pas mal, mais bien sûr le temps restant change de manière intempestive (ce qui est normal, car ça dépend de la rapidité des gros fichiers par rapport aux plus petits, de l'occupation actuelle du processeur...). En bref, ça passe de 2943 minutes à -3 secondes sans autres, et ça repart à 3943324 heures...

Es-ce que quelqu'un à une idée pour reproduire le système qui calcule le temps de windows XP ? Il n'est certe pas très constant non plus, mais il est beaucoup plus réalise (il passe de 20 minutes à 15 min, par exemple).

Je suppose qu'il faudrait faire une moyenne, mais j'ai pas encore trouvé comment.

Merci,

Siteauludo

PS : Comme c'est un programme de backup, il peut y avoir des énormes fichiers comme des minuscules, et le tout en grande quantité.
mardi 19 décembre 2006 à 14:07:17 | Re : Calculer le temps restant dans une copie de fichiers

fcolo

Membre Club
Je pense à un tableau (tampon) dans lequel tu sauvegardes les x dernières mesures.
Pour l'affichage, tu indiques la moyenne des mesures du tableau.

Tu conserve juste l'index en cours du tableau, que tu incrémente à chaque nouvelle mesure. Dès que tu atteint la fin du tableau, tu reparts au début.

A toi de faire varier la taille du tableau pour trouver une version assez stable (pas assez de points implique des changements brutaux et trop de points fera pas assez varier la moyenne).

f.colo
mardi 19 décembre 2006 à 16:16:35 | Re : Calculer le temps restant dans une copie de fichiers

SharpMao

Membre Club
Hello,

Est-ce que tu peux nous mettre le bout de code ou tu fait le calcul, car si tu as -3s, ça veut dire qu'une des valeurs est négatives, et je ne vois pas comment ça peut arriver.

Amicalement, SharpMao
mercredi 20 décembre 2006 à 21:34:03 | Re : Calculer le temps restant dans une copie de fichiers

Siteauludo

Bonjour, tout d'abort, merci pour vos réponses, mais pour répondre à SharpMao, non, je n'ai pas le code, car vu qu'il ne marchait pas je l'ai supprimé, et maintenant que j'ai fini mon projet je souhaiterai le réajouter. Mais le code était simple, Je calculais le temps nécessaire à la copie XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX D1 = Datetime.Now.TimeOfDay; File.Copy(x, y); D2 = Datetime.Now.TimeOfDay; TempsFichier = D2 - D1; TempsRestant = (TempsFichier / TailleFichierEnOctets) * TailleTotalBackupEnOctets; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Voilà, en gros c'était ça. J'ai aussi essayé avec les DateTime.Now.Ticks, mais impossible de trouver comment les reconvertir en secondes. Merci, Siteauludo
vendredi 22 décembre 2006 à 12:56:43 | Re : Calculer le temps restant dans une copie de fichiers

Siteauludo

Personne ne peut me dire si le code est bon ? Siteauludo
mercredi 27 décembre 2006 à 09:13:48 | Re : Calculer le temps restant dans une copie de fichiers

SharpMao

Membre Club
Réponse acceptée !
Hello,

Il y a un défaut à ton calcul, c'est que tu ne tiens compte que du dernier fichier copié. En tenant compte de l'ensemble des fichiers déjà copiés, tu auras une approximation plus précise.

On peut dire que le temps restant est égal au temps effectué multiplié par le rapport entre la taille restante à copier et la taille déjà copiée.

string

[] FileList = Directory.GetFiles(Path1);
long
lngTotSize = 0;
foreach (string strFile in
FileList)
{
   lngTotSize += newFileInfo
(strFile).Length;
}

DateTime dtStart = DateTime
.Now;
long
lngCopiedSize = 0;

foreach (string strFile in
FileList)
{
   FileInfo fi = newFileInfo
(strFile);
   File.Copy(strFile, Path
.Combine(Path2, fi.Name));
   lngCopiedSize += fi.Length;
   TimeSpan TimeDone = DateTime.Now - dtStart;
   
TimeSpan TimeRemaining = newTimeSpan((long)(TimeDone.Ticks * ((double)(lngTotSize -       lngCopiedSize) / lngCopiedSize))).ToString();
}

Les typecasting et les parenthèses sont très importants, car si on ne convertit pas en double, une fois la moitié passée, le resultat de la division est inférieur à 1, donc 0 pour un type long. Il faut également faire attention, car même si les nombres sont des long (64 bits), si on les multiplie sans précautions, on peut rapidement arriver à des Overflow, et donc des nombres négatifs.

J'espère que je ne me suis pas trompé dans mes calculs, et que ceci pourra t'aider.

Amicalement, SharpMao
mercredi 27 décembre 2006 à 18:51:11 | Re : Calculer le temps restant dans une copie de fichiers

Siteauludo

Merci beaucoup !

Désolé d'avance, je ne peux pas tester ça immédiatement, j'ai du désinstaller visual studio, et je ne pourrais pas l'installer avant plusieurs jours, mais ce code me paraît très bien !

Je posterai les résultats ici, au cas où d'autres personnes auraient le même problème que moi.

Encore merci,

Siteauludo


Cette discussion est classée dans : copie, temps, fichiers, calculer, restant


Répondre à ce message

Sujets en rapport avec ce message

Calcul de temps [ par TheGo ] Salut ..Voila j'ai une fonction qui doit afficher le temps restant avant l'execution d'une action .Ma fonction arrive a afficher les secondes restante Temps d'exécution d'1 aspx : comment le calculer ? [ par v1nce ] Bonjour,J'ai des problème de perf dans l'exécution de mes scripts aspx sans que je sache si cela vient des scripts ou d'un problème réseau.Mon site es Copie de fichiers fini?????? [ par yanis7518 ] SalutComment puis-je savoir que la copie d'un fichiers(ou plusieur fichiers) est terminée avant de passer au traitement suivant<IMG Création de dossiers et Copie de fichiers mp3 [ par Moomoon07 ] Salut !Est ce quelqu'un pourrait me dire quelle classe utiliser pour créer des dossiers et copier des fichiers.Je voudrais aussi pouvoir classer les f FileSystemWatcher et copie de nombreux fichiers [ par katwes ] Bonjour,J'ai besoin de de scruter un répertoire dans l'attente de fichiers.J'utilise FileSystemWatcher pour détecter les changements dans ce répertoir Ouvrir plusieurs fichiers en même temps à partir de l'exploreur [ par Cryel ] Salut,Je développe un lecteur mp3 en C# et je veux faire en sorte que si je sélectionne plusieurs fichiers audio dans l'explorateur windows, je voudra Copie de tout les répertoires et les fichiers [ par roumshi ] Salut!Je voulais savoir comment on fait pour copier tout les repertoires et les fichiers d'un répertoire sélectionné!pour les fichier c'est bien file. ProgressBar et copie de fichiers [ par geektoo ] Salut à tous,J'ai un petit soucis avec une progressbar.Voila, je voudrais afficher la progression de copie de fichiers, mais part lot.Avec un foreach Copie de fichiers d'un PC vers un autre PC [ par cybers7119 ] Bonjour à tous,J'utilise actuellement Visual Studio pour un développement d'applications en C#.J'aimerais savoir s'il existe un moyen, en C#, de copie Copie de Fichiers et tri alphabétique [ par thebigboss ] J'ai deux questions. 1er: Comment trier par ordre alphabétique un tableau de string???? 2eme: <img


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales