Siteauludo
Messages postés60Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention15 mai 2007
-
19 déc. 2006 à 13:10
Siteauludo
Messages postés60Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention15 mai 2007
-
27 déc. 2006 à 18:51
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 :
ç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é.
A voir également:
Calcul du temps nécessaire pour copier les fichiers
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 27 déc. 2006 à 09:13
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;
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.
cs_fcolo
Messages postés201Date d'inscriptionmercredi 8 février 2006StatutMembreDernière intervention20 février 20072 19 déc. 2006 à 14:07
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).
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 19 déc. 2006 à 16:16
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.
Siteauludo
Messages postés60Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention15 mai 2007 20 déc. 2006 à 21:34
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.
Siteauludo
Messages postés60Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention15 mai 2007 27 déc. 2006 à 18:51
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.