2009-01-03 6 views
0

quand je lance ce code:Problème: Obtenir une taille de l'unité mobile en utilisant C# lève une exception - Commentés

CONADefinitions.CONAPI_FOLDER_INFO2 FolderInfo; 
int iResult = 0; 
IntPtr Buffer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(CONADefinitions.CONAPI_FOLDER_INFO2)));     
iResult = CONAFileSystem.CONAFindNextFolder(hFindHandle, Buffer); 
while (iResult == PCCSErrors.CONA_OK) 
{ 
FolderInfo = (CONADefinitions.CONAPI_FOLDER_INFO2)Marshal.PtrToStructure(Buffer,typeof(CONADefinitions.CONAPI_FOLDER_INFO2));                
    //......................... i got an error msg here as follows: 
    // Error Messege: 
     FatalExecutionEngineError was detected Message: The runtime has encountered a 
     fatal error. The address of the error was at 0x7a0ba769, on thread 0x1294. The 
     error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe 
     or non-verifiable portions of user code. Common sources of this bug include 
     user marshaling errors for COM-interop or PInvoke, which may corrupt the stack. 

comment utiliser CONADefinitions.CONAPI_FOLDER_INFO2, coz quand je l'utilise CONADefinitions.CONAPI_FOLDER_INFO il me donne seulement le nom et lable du dispositif mais quand est l'utilisation CONADefinitions.CONAPI_FOLDER_INFO2 il me donne FREESIZE et TotalSize

s'il vous plaît aider

+0

Pourquoi cette question a été rejetée? – Kamarey

Répondre

2

Je ne suis pas sûr ce que cela signifie d'erreur, mais si vous voulez obtenir la taille du lecteur, vous peut utiliser

 DriveInfo di = new DriveInfo("f"); //Put your mobile drive name 
     long totalBytes = di.TotalSize; 
     long freeBytes = di.TotalFreeSpace; 
+0

ok cela a fonctionné mais il renvoie la taille en termes de quoi (Bytes, KByte, MByte, GByte)?!? – BDeveloper

+0

c'est en octets ... il suffit de le convertir à l'unité que vous voulez, divisez-le par 1024 pour obtenir KB, diviser par 1024 pour obtenir MB et ainsi de suite ... –

+0

Cher leon cette fonction me donne la taille de mes dirves locaux ("c: \", "E: \") mais pas le mobile dérive?!?!?! – BDeveloper

0

Il est exact que vous obtenez l'exception lorsque vous essayez de convertir les données dans la mémoire tampon à un autre type de structure que l'origine créée par CONAFileSystem.CONAFindNextFolder.

Vous essayez de forcer une structure de données de type CONADefinitions.CONAPI_FOLDER_INFO dans une structure de type CONADefinitions.CONAPI_FOLDER_INFO2. Ils ont certainement des longueurs différentes et ainsi de suite, il est donc extrêmement improbable que cette méthode fonctionne. D'après l'expérience avec le développement C++ sur le système d'exploitation Symbian, le modèle que Nokia utilisera probablement ici est celui où il a développé une version plus récente de l'API et a donc créé une nouvelle version de la structure CONADefinitions.CONAPI_FOLDER_INFO (c'est-à-dire CONADefinitions.CONAPI_FOLDER_INFO2). En supposant que c'est correct, il y a 3 vraisemblances:
1) Il y a un paramètre enum à la première fonction qui spécifie quelle version de la structure de sortie doit être créée.
2) Il y a une nouvelle fonction qui renvoie la nouvelle structure, par ex. CONAFileSystem.CONAFindFirstFolder2, CONAFileSystem.CONAFindNextFolder2
3) Nokia a développé la nouvelle version en interne mais ne l'a pas encore publiée publiquement.

Questions connexes