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
Mary-Kate Olsenoriginal
2024-11-28 02:28:11418parcourir

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
);

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")
  1. Obtenir un pointeur de fonction vers la fonction GetDiskFreeSpaceExW() :
GetDiskFreeSpaceExW := kernelDLL.MustFindProc("GetDiskFreeSpaceExW")
  1. Créer des variables pour recevoir les résultats :
var free, total, avail int64
  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)),
)
  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)

Exemple de sortie

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

1 0 Success.
Free: 16795295744 Total: 145545281536 Available: 16795295744

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!

Déclaration:
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