Accueil > Forum > > > > Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx
Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx
mercredi 25 juin 2008 à 12:10:51 |
Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

sturtrid
|
Bonjour à tous les confrères... Je viens faire appel à votre perspicacité car je rencontre un problème avec l'utilisation de l'API "GetDiskFreeSpace" ou de sa version "GetDiskFreeSpaceEx"... Pour info, mon but est d'obtenir la taille des clusters d'un DD car mon programme en a besoin. Voici les API en question :
'===================== API GetDiskFreeSpace ======================== Private Declare Function GetDiskFreeSpace _ Lib "kernel32"Alias"GetDiskFreeSpaceA"_ ( ByVal lpRootPathName As String, _ ByRef lpSectorsPerCluster As Long, _ ByRef lpBytesPerSector As Long, _ ByRef lpNumberOfFreeClusters As Long, _ ByRef lpTotalNumberOfClusters As Long) As Boolean'=============================================================='==================== API GetDiskFreeSpaceEx ======================= Private Declare Function GetDiskFreeSpaceEx _ Lib"kernel32"Alias"GetDiskFreeSpaceExA" _ ( ByVal lpDirectoryName As String, _ ByVal lpFreeBytesAvailableToCaller As Long, _ ByVal lpTotalNumberOfBytes As Long, _ ByVal lpTotalNumberOfFreeBytes As Long) As Long'==============================================================
Au départ, j'ai tenté d'utiliser l'API GetDiskFreeSpace mais comme cela ne marchait pas (elle me retourne0 à chaque fois => signe d'echec de l'API), donc j'ai testé son autre version GetDiskFreeSpaceEx.... Mais le resultat est le même !
Les fonctions d'appel :
'===================== SUB pour GetDiskFreeSpace ==================== Private Sub API_GetDiskFreeSpace()
Dim SecteurByCluster As Long Dim OctetBySecteur As As Long Dim ClusterLibre As As Long Dim ClusterDisque As As Long
GetDiskFreeSpace("C:\", SecteurByCluster, OctetBySecteur, _ ClusterLibre, ClusterDisque)
MessageBox.Show(Chemin) MessageBox.Show("Nombres de secteur par cluster : " & SecteurByCluster) MessageBox.Show("Nombre de octets par secteur : " & OctetBySecteur) MessageBox.Show("Nombre de cluster libre : " & ClusterLibre) MessageBox.Show("Nombres de Cluster sur le disque : "& ClusterDisque)
End Sub '==============================================================
'==================== SUB pour GetDiskFreeSpaceEx =================== Private SubAPI_GetDiskFreeSpaceEx()
Dim RES As Long Dim TotalBytes As Long Dim FreeBytes As Long Dim BytesAvailableToCaller As Long
RES = GetDiskFreeSpaceEx _ ("C:\", BytesAvailableToCaller, TotalBytes, FreeBytes)
If (Status <> 0) Then MessageBox.Show("TotalBytes : " &Total Bytes) MessageBox.Show("FreeBytes : " &FreeBytes) MessageBox.Show("BytesAvailableToCaller : " &BytesAvailableToCaller) End If
End Sub '==============================================================
Ensuite j'utilise comme suit dans un évènement Click par exemple (pour le test) :
API_GetDiskFreeSpace() API_GetDiskFreeSpaceEx()
Vala, avec ça les fonctions me retournent 0 pour toutes les valeurs dans mes MsgBox...
Si quelqu'un voit le problème cela me serait d'une grande aide. C'est peut être une erreur de code de ma part mais je ne pense pas puisque le code "tourne". J'ai essayé avec plusieurs types numériques pour les paramètres, testé sur plusieurs DD mais rien n'y fait !
Merci d'avance pour votre aide...
PS: si la valeur est accessible via le registre ou un autre moyen, je suis preneur mais je préfèrerais par API...
|
|
mercredi 25 juin 2008 à 12:26:06 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

sturtrid
|
Euh... Désolé, quelques petites erreurs se sont glissées dans mon post... Les voici en soulignées :'===================== API GetDiskFreeSpace ======================== Private Declare Function GetDiskFreeSpace _ Lib "kernel32"Alias"GetDiskFreeSpaceA"_ ( ByVal lpRootPathName As String, _ ByRef lpSectorsPerCluster As Long, _ ByRef lpBytesPerSector As Long, _ ByRef lpNumberOfFreeClusters As Long, _ ByRef lpTotalNumberOfClusters As Long) As Long'==============================================================
'==================== SUB pour GetDiskFreeSpaceEx =================== Private SubAPI_GetDiskFreeSpaceEx()
Dim RES As Long Dim TotalBytes As Long Dim FreeBytes As Long Dim BytesAvailableToCaller As Long
RES = GetDiskFreeSpaceEx _ ("C:\", BytesAvailableToCaller, TotalBytes, FreeBytes)
If (RES <> 0) Then MessageBox.Show("TotalBytes : " & Total Bytes) MessageBox.Show("FreeBytes : " & FreeBytes) MessageBox.Show("BytesAvailableToCaller : " & BytesAvailableToCaller) End If
End Sub '==============================================================
En passant, mes MessageBox me retournent toujours 0, mais lorsque je fais un pas à pas détaillé et que je regarde la valeur des variables locales, "RES" prend une valeur non nulle assez importante (55834574849), mais j'ai aucune idée de sa signification !
|
|
mercredi 25 juin 2008 à 12:26:34 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

BruNews
|
GetDiskFreeSpace() est une antiquité encore présente pour compatibilité, A ABANDONNER ABSOLUMENT.
GetDiskFreeSpaceEx() prend 3 adresses (donc ByRef !!!) de buffers 64 bits (!!!) pour les retours. Vérifie si tes 'Long' sont bien de 64 bits.
ciao... BruNews, MVP VC++
|
|
mercredi 25 juin 2008 à 12:29:28 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

jmfmarques
|
Bonjour, Dit mille et une fois,
En VB.NBet, le typage est en Integer et non en Long.
|
|
mercredi 25 juin 2008 à 12:36:02 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

Charles Racaud
|
En vb.net, les Integer est en 32bits. Pour du 64, c'est bien du long. Private Declare Function GetDiskFreeSpaceEx _ Lib "kernel32" Alias "GetDiskFreeSpaceExA" _ (ByVal lpDirectoryName As String, _ ByRef lpFreeBytesAvailableToCaller As Long, _ ByRef lpTotalNumberOfBytes As Long, _ ByRef lpTotalNumberOfFreeBytes As Long) As Boolean [ Lien ]__________  Kenji
|
|
mercredi 25 juin 2008 à 12:36:55 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx
|
mercredi 25 juin 2008 à 12:55:26 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

sturtrid
|
==> BruNews : Vi désolé, j'ai passé mes params en ByRef mais cela ne change rien... Sinon pour les Long de 64 bits, je ne suis pas sure de te suivre... Les Long sont par définition des entiers de 64 bits, non? De toute façon, j'ai aussi testé en ULong ou en Integer (*jmfmarques) mais sans impact sur résultat !
|
|
mercredi 25 juin 2008 à 13:02:25 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

sturtrid
|
Bon, mon but étant avant tout de récupérer la taille des clusters d'un DD, vous me confirmez bien que ces API le permettent ? (Ce serait triste que je vous embête avec un problème d'API non appropriées...  ) Sinon peut être que d'autres API remplissent cette fonction, mais je n'ai trouvé que ces dernières. Si quelqu'un en possède une autre dans son sac...
|
|
mercredi 25 juin 2008 à 15:56:52 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

sturtrid
|
Réponse acceptée !
Ahhhhh ! Enfin... Bon bein ça finit par marcher, mais "GetDiskFreeSpace" est la seule API qui permet de récupérer la taille des clusters. Suffit de faire (lpSectorsPerCluster * lpBytesPerSector) après son appel (on l'aurait pas deviner hein ?!) J'ai pas tout compris sur le pourquoi du comment de se problème, j'ai bidouillé dans tous les sens et quand il m'a semblé être revenu au code de départ.... TADA! Si quelqu'un veut que je remette le code final, laissez un p'tit message... En tout cas je vous remercie pour votre coup de pouce ! A la prochaine et bonne fin de journée... ++ 
|
|
mercredi 25 juin 2008 à 16:02:46 |
Re : Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx

sturtrid
|
==> BruNews : Tu me disais que l'API "GetDiskFreeSpace" était une antiquité et qu'il fallait absolument la laisser tomber au profit de "GetDiskFreeSpaceEx", seulement seule la 1ère permet d'obtenir la taille des clusters... Comme je disais dans mon dernier post, mon code "tourne" enfin, mais si tu connais une API équivalente et non obsolète pense à moi...
Merci pour tes conseils de tout à l'heure ciao !
|
|
Cette discussion est classée dans : long, api, messagebox, getdiskfreespaceex, getdiskfreespace
Répondre à ce message
Sujets en rapport avec ce message
Comment utiliser l'API GetMessage ? [ par mox ]
Bonjour,J'aurais voulu savoir comment utiliser la fonction API suivante :Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, B
Comment utiliser l'API GetMessage ??????????????? [ par mox ]
Bonjour,J'aurais voulu savoir comment utiliser la fonction API suivante :Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, B
API !!!! API !!! JE ME POSE UNE QUESTION !! ?? [ par ATH|500| ]
VOICI UN EXAMPLE D'API !!! Je me demandais quelques choses les api comme c'est deux là ben est-ce qu'il faut taper le code a la main ou bien il y a un
Au sujet de l'Api GetTextColor [ par miko500 ]
Salut, j'ai un problème, encore un...J'aimerais utiliser l'api gettextcolor pour relever la couleur d'arrière plan d'une form dans un textbox, je croi
Paramétrer l'impression d'un .txt à partir d'un API [ par skar13 ]
Jutilise l'API :Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String
API pour impression [ par chewbacca ]
J'essaie d'utiliser cette win api pour forcer le format d'impression a A3 mais cela ne marche pas, qqn l'a t il deja utilisée et si oui pourrait il m
API trackpopupmenu [ par keri ]
yep!voila, g un probleme de popup menu:avec l'api TrackPopUpMenu je veux ouvrir une popupmenu a un endroit precis de mon form.voila l'API:Public Decla
API CreateProcess [ par ShanaBurns ]
Bonjour,Je voudrais utiliser l'api CreateProcess mais sous Vb.net, mais le type Any ne fonctionne plus sous cette version et je ne vois pas trop comme
mysql et api [ par midgorn ]
bonjour, j essaye d'acceder a une base mysql avec vb.j'utilise l'api mysql.apparemment la connection se passe bien , mais au moment d'executer une req
API Rectangle hDC [ par peug ]
Bonjour, j'essai de dessiner avec l'API.Dans un ActiveX, comment utiliser la fonction Rectangle ?Je crée une sub :Public Sub DrawRectangle(ByRef hDC A
Livres en rapport
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en œuvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|