Maison > développement back-end > Golang > Comment déterminer la capacité totale d'un disque à l'aide des API Go et Windows ?

Comment déterminer la capacité totale d'un disque à l'aide des API Go et Windows ?

Mary-Kate Olsen
Libérer: 2024-11-28 02:28:11
original
401 Les gens l'ont consulté

How to Determine a Drive's Total Capacity Using Go and Windows APIs?

Détermination de la capacité du disque sous Windows à l'aide des API Go

Dans une question précédente, vous avez demandé des conseils pour obtenir l'espace disque disponible dans Go à l'aide de Windows Appels API. Cette réponse a démontré l'utilisation de la fonction GetDiskFreeSpaceExW() de kernel32.dll pour récupérer ces informations.

Pour approfondir votre exploration, vous souhaitez maintenant déterminer la taille totale d'un lecteur spécifique, tel que C:. La fonction GetDiskFreeSpaceExW() peut également répondre à ce besoin.

Signature de GetDiskFreeSpaceExW()

La signature de cette fonction est la suivante :

BOOL GetDiskFreeSpaceExW(
  LPCWSTR         lpDirectoryName,
  PULARGE_INTEGER lpFreeBytesAvailableToCaller,
  PULARGE_INTEGER lpTotalNumberOfBytes,
  PULARGE_INTEGER lpTotalNumberOfFreeBytes
);
Copier après la connexion

Il prend un paramètre d'entrée (le chemin du lecteur) et renvoie trois paramètres de sortie : les octets libres disponibles pour le l'appelant, la taille totale du disque et le nombre total d'octets libres.

Utilisation dans Go

Pour utiliser cette fonction dans Go, vous pouvez suivre ces étapes :

  1. Charger le lien dynamique kernel32.dll library:
kernelDLL := syscall.MustLoadDLL("kernel32.dll")
Copier après la connexion
  1. Obtenir un pointeur de fonction vers la fonction GetDiskFreeSpaceExW() :
GetDiskFreeSpaceExW := kernelDLL.MustFindProc("GetDiskFreeSpaceExW")
Copier après la connexion
  1. Créer des variables pour recevoir les résultats :
var free, total, avail int64
Copier après la connexion
  1. Appelez la fonction avec le arguments :
path := "c:\"
r1, r2, lastErr := GetDiskFreeSpaceExW.Call(
    uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(path))),
    uintptr(unsafe.Pointer(&free)),
    uintptr(unsafe.Pointer(&total)),
    uintptr(unsafe.Pointer(&avail)),
)
Copier après la connexion
  1. Vérifiez la valeur de retour et imprimez les résultats :
fmt.Println(r1, r2, lastErr)
fmt.Println("Free:", free, "Total:", total, "Available:", avail)
Copier après la connexion

Exemple de sortie

L'exécution du code fourni produira une sortie similaire à celle-ci :

1 0 Success.
Free: 16795295744 Total: 145545281536 Available: 16795295744
Copier après la connexion

Cette sortie indique que le C : le lecteur a une taille totale de 145545281536 octets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal