Déterminer l'espace disque total et libre dans .NET
Je suis en train d'essayer de trouver un moyen pour déterminer le total et l'espace disque disponible dans l'arbitraire d'un dossier à partir d'un .NET application. Par "espace disque total" et "espace disque disponible" dans un dossier que je reportez-vous à la total et espace disponible sur le disque que ce dossier serait en rapport si vous avez effectué une commande "dir", c'est, au total et espace disponible sur le disque du lecteur logique contenant ce dossier, considérant que le compte d'utilisateur sous lequel la demande est faite.
Je suis à l'aide de C#. La méthode devrait fonctionner à la fois pour les dossiers locaux et distants étant donné que les chemins d'accès UNC (plutôt que d'accéder par le biais de lettres de lecteur mappé). Par exemple, il doit travailler pour:
- C:\Temp
- \\Silfen\Ressources\Temp2
Je commence avec un objet DirectoryInfo, mais cela ne semble pas avoir d'associé de l'espace disque de l'information. La classe de DriveInfo ne, mais il ne fonctionne pas avec les dossiers distants.
Modifier. Après quelques échanges avec vous les gars, j'envisage de cartographie à distance des dossiers comme des lecteurs locaux, à l'aide de DriveInfo pour obtenir les données, et le détachement de nouveau. Le problème avec cette approche est que mon appli a besoin de recueillir les données pour plus de 120 dossiers de quelques fois par jour, tous les jours. Je ne suis pas sûr que ce serait faisable.
Des idées? Merci.
source d'informationauteur CesarGon
Vous devez vous connecter pour publier un commentaire.
Comment sur ce lien à partir de MSDN qui utilise le
System.IO.DriveInfo
classe?Vous pouvez utiliser
GetDiskFreeSpaceEx de kernel32.dll qui fonctionne avec UNC-chemins et des lecteurs. Tout ce que vous devez faire est d'inclure un DllImport (voir le lien pour un exemple).
Ce peut ne pas être ce que vous voulez, mais je vais essayer de les aider, et il a le bonus d'un peu de sécuriser l'effacement de l'espace libre de votre disque dur.
Pas vraiment un exemple en C#, mais peut vous donner un indice - un VB.NET fonction renvoyant à la fois espace libre et l'espace total sur le lecteur (en octets) le long du chemin d'accès spécifié. Travaille pour les chemins d'accès UNC ainsi, à la différence du Système.IO.DriveInfo.
VB.NET:
Système.IO.DriveInfo fonctionne très bien. Je suis attaché à deux serveurs Netware, avec plusieurs lecteurs mappés.
Voilà pour le local C: drive:
Voici la sortie de l'un des lecteurs réseau:
J'ai utilisé le code suivant, directement à partir de la MSDN docs sur DriveInfo:
Voici une possibilité que j'ai utilisé pendant des années. L'exemple ci-dessous est VBScript, mais il devrait fonctionner avec tous les COM-connaissance de la langue. Notez que
GetDrive()
fonctionne sur UNC actions.Maksim Sestic a donné la meilleure réponse, car il fonctionne sur les deux, locaux et des chemins UNC. J'ai changé de code un peu pour une meilleure gestion des erreurs et a fourni un exemple. Fonctionne pour moi comme un charme.
Vous avez besoin de mettre
dans votre code, afin de permettre DllImport d'être reconnu.
Voici le code modifié:
L'appeler de cette façon:
Le dossier peut également être un répertoire local comme
drive:\path\path\...
Il est encore en VB.NET mais ne devrait pas être un problème pour traduire en C#.
Je suis sûr que cela est impossible. Dans l'explorateur windows, si j'essaie d'obtenir les propriétés du dossier d'un répertoire UNC, il ne me donne rien, autant que de l'espace disponible. Utilisé/Disponible l'espace est une caractéristique de lecteurs, pas les dossiers, et UNC actions sont traitées comme des dossiers.
vous devez soit:
- Mapper un lecteur
- Exécuter quelque chose sur l'ordinateur distant pour vérifier l'espace disque.
Vous pouvez également rencontrer des problèmes avec quelque chose comme le système de fichiers Distribués, dans lequel un UNC/partage de connexion n'est PAS lié à un lecteur spécifique, donc là vous avez fait la somme de plusieurs disques.
Et ce sur les quotas des utilisateurs? Le disque peut ne pas être complète, mais le compte que vous utilisez pour écrire dans ce dossier peut avoir atteint sa limite.
Pas de C# et donne à l'espace disponible, mais . . .
vous obtient une partie du chemin. Je suis à la recherche ou à la même solution, mais il ne semble pas être un joli lorsque l'on essaie d'éviter le mappage de lecteurs.