Moyen facile d'obtenir la taille du dossier (ObjC/Cacao)?
Actuellement, j'utilise ce code pour obtenir la taille d'un dossier:
NSArray *contents;
NSEnumerator *enumerator;
NSString *path;
contents = [[NSFileManager defaultManager] subpathsAtPath:folderPath];
enumerator = [contents objectEnumerator];
while (path = [enumerator nextObject]) {
NSDictionary *fattrib = [[NSFileManager defaultManager] fileAttributesAtPath:[folderPath stringByAppendingPathComponent:path] traverseLink:YES];
fileSize +=[fattrib fileSize];
}
[contents release];
[path release];
Le problème, c'est que son très innacurate. Il ajoute quelques méga-octets ou déduit de quelques mégaoctets à partir de la taille réelle. Par exemple, j'ai eu la taille de fichier d'une .app bundle et cette méthode a signalé 16,2 MO, alors que la chose réelle est de 15,8.
Quel est le meilleur moyen pour obtenir la taille d'un dossier?
Grâce
- Toute personne utilisant ce sous le bac à sable? 🙂
Vous devez vous connecter pour publier un commentaire.
J'avais besoin de le faire aujourd'hui, moi-même, et j'ai trouvé que le code de ce post sur le Cacao-dev liste est super rapide et correspond à ce que l'Finder dit à l'octet. (n'oubliez pas de OU dans le kFSCatInfoRsrcSizes drapeau de sorte que vous obtenez la fourchette de ressource tailles, trop!)
Si vous avez besoin de plus d'explication sur comment l'utiliser, il suffit de laisser un commentaire et je vais éditer ce post. =)
La documentation pour
fileSize
états, il ne comprend pas la taille d'une branche de ressources. Vous devrez peut-être utiliser le Carbone Gestionnaire de Fichiers de l'API fiable pour calculer répertoire tailles.Je voulais juste deuxième Dave DeLong la suggestion sur le post de Cacao-dev, mais ajouter une mise en garde pour être sûr de lire tous les messages du sujet. Il y en a un par Rosyna c'est particulièrement intéressant de noter. Dans mon cas, j'ai suivi les conseils (en changeant max articles par extraction à 40) et j'ai vu une vitesse de saut ainsi que la fin d'un méchant bug.
espère que cela aidera
C'est généralement la façon dont c'est fait. 2 possibilités:
Vérifier votre octet -> mégaoctet routines de conversion. Aussi, voulez-vous de mégaoctets ou de mebibytes? (Cela dépend probablement sur ce que vous êtes en la comparant à d'.)
Essayer de passer PAS pour le
traverseLink
paramètre. Il pourrait très bien être un lien symbolique dans le bundle du doigt quelque chose d'autre que la routine vous êtes le comparant à ne pas prendre en compte. Vous pourrez compter quelque chose dans le paquet deux fois, ou vous allez inclure quelque chose de hors forfait entièrement (le plus probable de l'ancien).Je sais que c'est un vieux sujet. Mais pour tous ceux qui cherchent des réponses sur la façon de le faire,
Il va utiliser le terminal pour déterminer une taille pour les dossiers en octets. Et il va utiliser du Cacao construit en NSFileManager pour obtenir la taille des fichiers. Il est très rapide, et se met à la taille exacte que finder rapports.
NSFileManager
, qui ne comprend pas les resource forks lors du calcul de tailles.Ce code est que l'extension(la catégorie) de la NSFileManager classe. Il additionne les montants de tout le contenu du dossier.
Notez que l'erreur de traitement pourrait être améliorée.