Pour chacune des entrées ci-dessous, j'aimerais obtenir l'espace libre à cet emplacement. Quelque chose comme
long GetFreeSpace(string path)
Entrées :
c:
c:\
c:\temp
\\server
\\server\C\storage
Pour chacune des entrées ci-dessous, j'aimerais obtenir l'espace libre à cet emplacement. Quelque chose comme
long GetFreeSpace(string path)
Entrées :
c:
c:\
c:\temp
\\server
\\server\C\storage
Je sais que cette réponse est ancienne, mais il faut généralement utiliser AvailableFreeSpace
comme le dit @knocte. AvailableFreeSpace
liste la quantité réellement disponible pour l'utilisateur (en raison des quotas). TotalFreeSpace
liste ce qui est disponible sur le disque, sans tenir compte de ce que l'utilisateur peut utiliser.
J'ai upvoted le commentaire de @RoyT car il a pris le temps d'expliquer pourquoi l'un est recommandé plutôt que l'autre.
Extrait de code de travail utilisant GetDiskFreeSpaceEx
à partir du lien de RichardOD.
// Pinvoke for API function
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetDiskFreeSpaceEx(string lpDirectoryName,
out ulong lpFreeBytesAvailable,
out ulong lpTotalNumberOfBytes,
out ulong lpTotalNumberOfFreeBytes);
public static bool DriveFreeBytes(string folderName, out ulong freespace)
{
freespace = 0;
if (string.IsNullOrEmpty(folderName))
{
throw new ArgumentNullException("folderName");
}
if (!folderName.EndsWith("\\"))
{
folderName += '\\';
}
ulong free = 0, dummy1 = 0, dummy2 = 0;
if (GetDiskFreeSpaceEx(folderName, out free, out dummy1, out dummy2))
{
freespace = free;
return true;
}
else
{
return false;
}
}
Je préférerais qu'il renvoie un message vide, comme ... if (!GetDiskFreeSpaceEx(folderName, out free, out total, out dummy)) throw new Win32Exception(Marshal.GetLastWin32Error());
. C'est assez pratique de trouver le code ici de toute façon.
Je vérifie juste, mais je pense que "CameraStorageFileHelper" est un artefact de ce code qui a été copié-collé de l'original ?
Ça n'a pas besoin de se terminer par "\\"
. Ce peut être n'importe quel chemin de répertoire existant ou même simplement C:
. Voici ma version de ce code : stackoverflow.com/a/58005966/964478
DriveInfo vous aidera avec certains d'entre eux (mais il ne fonctionne pas avec les chemins UNC), mais je pense vraiment que vous devrez utiliser GetDiskFreeSpaceEx . Vous pouvez probablement réaliser certaines fonctionnalités avec WMI. GetDiskFreeSpaceEx semble être votre meilleure option.
Il est probable que vous devrez nettoyer vos chemins pour qu'ils fonctionnent correctement.
Je cherchais la taille en Go, donc j'ai juste amélioré le code de Superman ci-dessus avec les changements suivants :
public double GetTotalHDDSize(string driveName)
{
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.IsReady && drive.Name == driveName)
{
return drive.TotalSize / (1024 * 1024 * 1024);
}
}
return -1;
}
Non testé :
using System;
using System.Management;
ManagementObject disk = new
ManagementObject("win32_logicaldisk.deviceid="c:"");
disk.Get();
Console.WriteLine("Logical Disk Size = " + disk["Size"] + " bytes");
Console.WriteLine("Logical Disk FreeSpace = " + disk["FreeSpace"] + "
bytes");
En fait, quel est le résultat de l'espace disque libre sur c : \temp ? vous obtiendrez l'espace libre de c:\.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Duplicata exact : stackoverflow.com/questions/412632
56 votes
Il ne s'agit pas d'un doublon, la question de stackoverflow.com/questions/412632 ne concerne que les disques, je pose également des questions sur les chemins UNC et la solution de 412632 ne fonctionne pas pour eux.