2010-03-26 18 views
1

Est-il possible de déterminer l'état de fragmentation d'un fichier spécifique (c'est-à-dire la quantité de fragments distincts que ce fichier occupe)? Si oui, comment cela peut-il être fait en utilisant .net?Déterminer par programme le statut de fragmentation d'un fichier

La motivation est la suivante: mon application conserve les données dans un FileStream, en modifiant sa taille à la demande. Cela entraîne éventuellement la fragmentation du fichier. Je voudrais surveiller l'état de fragmentation du fichier, et basé sur cela - prendre une décision si le fichier doit être copié et remplacé par un nouveau fichier (en le "défragmentant" sans apporter de modifications à la MFT).

Répondre

3

Cela tombe carrément dans la catégorie «optimisation prématurée». Il n'est pas du tout garanti que vous provoquerez une fragmentation, le disque pourrait bien avoir des clusters non validés après la fin du fichier et cela arrive souvent. Peut-être plus le point, il n'y a rien dans le cadre .NET qui vous permet de détecter ou de résoudre ce problème. L'accès au fichier MFT du volume nécessite du code non géré et des privilèges d'administrateur.

La défragmentation d'un disque est une tâche normale de maintenance de la machine. C'est devenu automatique avec Win7.

+0

@nobugz, je vous remercie pour votre POV, mais s'il vous plaît permettez-moi d'expliquer: 1. quand souvent augmenter la taille d'un FileStream, il tend à provoquer la fragmentation (dans mon expérience, voir aussi http://stackoverflow.com/questions/917309/how-i-limit-file-fragmentation-while-working-with-net). 2. créer un nouveau flux d'une certaine taille et copier le flux original dans celui-ci tend à surmonter la fragmentation, car le nouveau fichier est alloué avec une jolie séquence de clusters, donc j'ai un moyen de "réparer" cela. –

+0

3. Je ne suppose pas la fragmentation, je suppose que c'est possible, et je cherche un moyen d'annuler ou de vérifier mes soupçons à l'exécution. 4. Je pourrais aller la façon très laide d'activer la defragAnalysis et vérifier le fichier journal ... mais c'est vraiment moche. 5. Je peux vous le dire avec certitude, mes clients ne défragment pas leurs disques, et la plupart utilisent encore WinXP. @ Mark Ransom, J'aimerais avoir un SSD, et j'aimerais en avoir un pour chacun de mes clients. Peut-être que dans dix ans, la fragmentation des fichiers serait obsolète. Pendant ce temps ... –

+0

@nobugz, à la fin, vous avez probablement raison, c'est probablement l'optimisation prématurée. Encore, j'aimerais obtenir une réponse à la question elle-même (sans tenir compte de la motivation) –