discrepância de tamanho entre o tamanho da pasta a partir do Finder e do gerenciador de arquivos de carbono

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

Pergunta

Eu estou usando este método por Dave DeLong para calcular o tamanho de uma pasta usando o Gerenciador de Arquivos API Carbono:

http://github.com/davedelong/BuildCleaner/blob /b2712242b4eea1fff0e78a08b393a417e3019c8a/NSFileManager+FileSize.m

(É o primeiro método lá)

O problema que estou tendo é que algumas pastas (bundles .app no ??meu caso) não estão relatando o tamanho correto. Por exemplo, DiskWarrior é 8.2MB, eo relatórios método 6,6MB

Todas as ideias sobre por que isso está acontecendo?

OBRIGADO

Foi útil?

Solução

O Finder irá relatar tamanhos de arquivo arredondado para o múltiplo mais próximo do tamanho do bloco (geralmente 4 KB) seguido pelo real tamanho em bytes, e muitos (a maioria) aplicações são feixes de arquivos, assim o verdadeiro tamanho do aplicativo pode ser muito menor do que o tamanho mostrado como o valor primeiro ( "no disco").

Você pode testar isso fazendo algo (no Terminal) como:

echo -n 'foo' > foo.txt

Se você Obter Informações sobre este arquivo no Finder, ele irá informar o tamanho como "4 KB no disco (3 bytes)".

Outras dicas

Eu melhorei em que o código fonte da mina que você tiver vinculado a. Aqui é a versão mais recente:

http://github.com/davedelong/BetterInfo/blob /aa1cfe079dad6207a7ddac84b108a768c2cc7156/NSFileManager+BetterInfo.m (Você também vai precisar do arquivo .h correspondente e este arquivo de suporte )

Agora, em vez de retornar e NSUInteger, ele retorna uma estrutura do tipo "BIItemSyze", que tem seis membros:. DataLogicalSize, dataPhysicalSize, resourceLogicalSize, resourcePhysicalSize, logicalSize e physicalSize

Se você sabe como usar AppleScript de no seu código, aqui está um método o retorno do tamanho que você veria na janela do Finder Get Info. Note-se que o valor devolvido é em bytes.

on getSizeInBytesFromPosixPath(posixPath)
    try
        set b to (POSIX file posixPath) as string
        tell application "Finder" to return size of (b as alias)
    on error
        return 0
    end try
end getSizeInBytesFromPosixPath
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top