2009-01-03 39 views
0

當我運行這段代碼:當我使用CONADefinitions.CONAPI_FOLDER_INFO問題:獲取使用C#移動驅動器大小引發異常 - 評論

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. 

如何使用CONADefinitions.CONAPI_FOLDER_INFO2,怎麼只給我起的名字和該設備 的拉布勒但是當在使用CONADefinitions.CONAPI_FOLDER_INFO2它給我FREESIZE和總計TOTALSIZE

請幫助

+0

爲什麼這個問題被拒絕? – Kamarey 2009-08-04 12:21:30

回答

2

我不知道該錯誤的手段,但如果你想獲取驅動器的大小是什麼,你可以使用

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

確定它的工作,但它返回什麼樣的大小(字節,KByte,MByte,GByte)?!? – BDeveloper 2009-01-03 13:46:01

0

您獲得異常,當你試圖在緩衝區比最初由CONAFileSystem.CONAFindNextFolder創建轉換數據到不同類型的結構它是正確的。

您試圖強制CONADefinitions.CONAPI_FOLDER_INFO類型的數據結構進入CONADefinitions.CONAPI_FOLDER_INFO2類型的結構。他們幾乎可以肯定有不同的長度,所以這種方法極其不可能發揮作用。

從Symbian OS上的C++開發經驗來看,諾基亞可能在這裏使用的模式是後來開發了更新版本的API,因此創建了更新版本的CONADefinitions.CONAPI_FOLDER_INFO結構(即CONADefinitions.CONAPI_FOLDER_INFO2)。

假設這是正確的,有3個可能性:
1)第一個函數有一個枚舉參數,它指定要創建哪個版本的輸出結構。
2)有一個新的函數返回新的結構,例如CONAFileSystem.CONAFindFirstFolder2,CONAFileSystem.CONAFindNextFolder2
3)諾基亞內部開發了新版本,但尚未公開發布。