Como obter o tamanho (livre, total) da unidade de telefone usando o Nokia API?

StackOverflow https://stackoverflow.com/questions/409487

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu quero obter o tamanho da unidade de telefone. Eu estou usando "Nokia-PC-Conectividade"., E com respeito ao sistema de arquivos API I encontrado na função CONADifinition chamado CONA_Folder_Info mas esta função suporte doens't FreeSize e tamanho total, mas não há CONA_Folder.Info2 e seu apoio instância estas variáveis .

Mas quando eu usei CONA_Folder.Info2 da seguinte forma:

CONADefinitions.CONAPI_FOLDER_INFO2 FolderInfo;
int iResult = 0;// Allocate memory for buffer
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));
  if (FolderInfo.pstrName[0].ToString() != "C" && level == 0) 
  {
  }

Eu recebo esta exceção:

FatalExecutionEngineError foi detectado Mensagem: O tempo de execução encontrou um erro fatal. O endereço do erro estava em 0x7a0ba769, em fio de 0x1278. O código de erro é 0xc0000005. este erro pode ser um bug no CLR ou em as porções perigosas ou não verificáveis do código do usuário. As fontes comuns de presente bug incluem erros de utilizador empacotamento para COM-interoperabilidade ou PInvoke, que pode corromper a pilha.

Nota: Eu uso o S60 plataforma de software . linguagem de aplicação é C #.

Para mais explicações, pergunte-me.

Foi útil?

Solução

É verdade que você começa a exceção quando você tentar converter os dados no buffer para um tipo diferente de estrutura do que foi originalmente criado por CONAFileSystem.CONAFindNextFolder.

Você está tentando forçar uma estrutura de dados do tipo CONADefinitions.CONAPI_FOLDER_INFO em uma estrutura do tipo CONADefinitions.CONAPI_FOLDER_INFO2. Eles quase certamente têm comprimentos diferentes e assim por diante assim por sua extremamente improvável que este método seria sempre trabalho.

A partir da experiência com o desenvolvimento C ++ no Symbian OS, o padrão Nokia são susceptíveis de estar usando aqui é aquele em que eles foram posteriormente desenvolveu uma versão mais recente do API e assim criaram uma versão mais recente da estrutura CONADefinitions.CONAPI_FOLDER_INFO (ie CONADefinitions.CONAPI_FOLDER_INFO2).

Assumindo que isso é correto, há 3 probabilidades:
1) Não é um parâmetro enum para a primeira função que especifica qual a versão da estrutura de saída é para ser criada.
2) Há uma nova função que retorna a nova estrutura v.g. CONAFileSystem.CONAFindFirstFolder2, CONAFileSystem.CONAFindNextFolder2
3) Nokia desenvolveram a nova versão internamente, mas ainda não divulgou publicamente.

Outras dicas

Eu não sei nada sobre a API Nokia, mas em geral eu vejo o seguinte:

  1. Encontre APIs geralmente têm um FindFirst, seguido por iterações de FindNext e, em seguida, um FindClose. Vejo você chamando FindNext com hFindHandle, mas eu não vê-lo chegando a lugar nenhum inicializado (o que geralmente acontece em uma chamada FindFirst). Se este for zero, que certamente poderia dar uma violação de acesso.
  2. Sem mais do seu loop while () parece que um loop infinito -? Eu suponho que você tem um outro em algum lugar FindNext
  3. encontro frequentemente chamadas exigem que a estrutura de entrada tem alguma inicialização feito - como o ajuste de um membro do comprimento. Verifique se o seu documentação da API para ver se o que é necessário aqui.
  4. Não vejo você libertar sua variável de buffer ou fechar a alça find (assumindo que é válido).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top