Pergunta

__int64 i64FreeBytes
unsigned __int64 lpFreeBytesAvailableToCaller,
                 lpTotalNumberOfBytes,
                 lpTotalNumberOfFreeBytes; // variables used to obtain 
                                           // the free space on the  drive

GetDiskFreeSpaceEx (Manager.capDir,
(PULARGE_INTEGER)&lpFreeBytesAvailableToCaller,
(PULARGE_INTEGER)&lpTotalNumberOfBytes,
(PULARGE_INTEGER)&lpTotalNumberOfFreeBytes);

i64FreeBytes = lpTotalNumberOfFreeBytes;
_tprintf(_T ("Number of bytes free on the drive:%I64u \n"),
     lpTotalNumberOfFreeBytes);

Eu estou trabalhando em uma rotina de gerenciamento de dados que é um aplicativo de linha de comando do Windows CE. Os shows de código acima como eu obter o número de bytes livres em uma unidade específica que contém a pasta Manager.capdir (é a variável que contém o nome completo do caminho do diretório).

A minha pergunta é, o número de bytes livres relatados pelo código acima (a declaração _tprintf) não coincide com o número de bytes livres na unidade (que eu verificar, fazendo um clique direito sobre a unidade).

Eu gostaria de saber se a razão para esta diferença?

Foi útil?

Solução

Eu tenho uma máquina de usuário único sem cota de disco em operação. Eu postei o código em um aplicativo MFC diálogo baseado e ele correu, com a única condição de que eu usei "C: \" como o parâmetro lpDirectoryName para que eu pudesse comparar com o espaço livre no disco conforme relatado pelo sistema. Que parecia lógico quanto espaço livre é apenas significativo para uma unidade, não uma pasta.

No começo eu pensei que eu estava vendo um problema semelhante, mas então eu re-correu a verificação (I amarrou-o a um botão), e tem o mesmo resultado que o diálogo Propriedades do naquele momento . Parece que o espaço livre em uma unidade é uma quantidade bastante dinâmica - Isso não é muito surpreendente, se é a unidade do sistema - e até mesmo na ausência de critérios que outros cartazes têm relatado muito corretamente, você não pode ver exatamente o mesmo número que as propriedades relatórios de diálogo no momento em que foi executado.

Outras dicas

Citando (com a edição) a documentação para GetDiskFreeSpaceEx ; ênfase:

lpFreeBytesAvailable [out, opcional] -

Um ponteiro para uma variável que recebe o número total de bytes livres em um disco que são disponíveis para o usuário que está associado com a vocação fio.

Este parâmetro pode ser NULL.

Se cotas por usuário estão sendo usados, este valor pode ser menos do que o total número de bytes livres em um disco.

lpTotalNumberOfBytes [out, opcional] -

Um ponteiro para uma variável que recebe o número total de bytes num disco que são disponíveis para o usuário que é associado com o segmento de chamada.

Este parâmetro pode ser NULL.

Se cotas por usuário estão sendo usados, este valor pode ser menos do que o total número de bytes em um disco.

Para determinar o número total de bytes em um disco ou volume, o uso IOCTL_DISK_GET_LENGTH_INFO.

Em outras palavras, este número depende do usuário, e se você quiser combinar o valor retornado pelo Explorer, uso lpFreeBytesAvailable.

Uma possibilidade vêm à mente. Talvez não está levando em conta o espaço perdido para particionar (janelas normalmente deixa 8MB no final da unidade de folga). Basicamente, há uma diferença entre o espaço deixado na unidade física e a uma lógica representado pela partição. Ou o espaço perdido para o próprio sistema de arquivos.

Eu não poderia dizer se estes são realmente o caso, mas eu olhar para ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top