Comment détecter total disponible/espace disque libre sur l'iPhone/iPad?
Je suis à la recherche d'une meilleure façon de détecter/espace disque libre sur l'iPhone/iPad par programme.
Actuellement, je suis en utilisant le NSFileManager pour détecter l'espace disque. Voici l'extrait du code qui fait le travail pour moi:
-(unsigned)getFreeDiskspacePrivate {
NSDictionary *atDict = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/" error:NULL];
unsigned freeSpace = [[atDict objectForKey:NSFileSystemFreeSize] unsignedIntValue];
NSLog(@"%s - Free Diskspace: %u bytes - %u MiB", __PRETTY_FUNCTION__, freeSpace, (freeSpace/1024)/1024);
return freeSpace;
}
Suis-je la corriger avec l'extrait ci-dessus? ou est-il une meilleure façon de connaître le total disponible/espace disque libre.
J'ai pour détecter le total d'espace disque libre, depuis que nous avons pour prévenir de notre application pour effectuer une synchronisation dans le faible espace disque scénario.
- J'espère que le stackoverflow lien va vous aider..
- Il ressemble au code qu'il l'aide dans sa question est mieux que le code dans le lien que vous avez donné (il est juste vérifier un répertoire au lieu de traverser tous les sous-répertoires sous "/")
- Grâce Mikhail pour le lien. Mais je suis à la recherche disponible total/espace disque disponible sur iPhone/iPad, et pas seulement à un dossier en particulier. Par exemple, sur un iPhone 32 go, si le total disponible/taille libre est 28GB, je devrais être en mesure de détecter que par programmation.
- J'espère que ce lien permet de : jayprakashdubey.blogspot.dans/2014/07/...
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: Depuis beaucoup de temps a passé après cette réponse et de nouvelles méthodes/Api ont été ajoutés, veuillez vérifier les mises à jour les réponses ci-dessous pour Swift, etc; Puisque je n'ai pas utilisé moi-même, je ne peux pas se porter garant pour eux.
Réponse originale à cette question:
J'ai trouvé la solution suivante de travail pour moi:
Il me renvoie exactement la taille qu'iTunes s'affiche lorsque l'appareil est connecté à la machine.
[error code]
ne devraient pas utiliser%@
lorsque le format à l'aide de NSLog.NSUInteger
au lieu de trucs commeuint64_t
? Nous sommes en train d'écrire l'Obj-C, pas du C++ ou C. NSUInteger vous donnera un entier non signé entier de 64 bits maintenant, mais si les choses se passent pour changer j'imagine que Apple va mettre à jour cette Macro (disons 128 bits à un certain point, devient réel)Révisé à la source à l'aide des unsigned long long:
EDIT: il semble que quelqu'un a édité ce code à utiliser "un uint64_t" au lieu de "unsigned long long". Alors que dans un avenir prévisible, ce doit être juste bien, ils ne sont pas les mêmes. 'un uint64_t' est de 64 bits, et sera toujours, que. Dans 10 ans "unsigned long long" pourrait 128. son un petit point, mais pourquoi j'ai utilisé unsignedLongLong.
Si vous avez besoin de chaîne formatée avec la taille, vous pouvez prendre un coup d'oeil à belle bibliothèque sur GitHub:
J'ai écrit une classe pour obtenir disponible/mémoire utilisée à l'aide de Swift.
Demo: https://github.com/thanhcuong1990/swift-disk-status
Swift 4 mis à jour.
Démo
do - catch
bloc. Pas de soucis à ce sujet.N'utilisez pas de 'unsigned', il n'est que de 32 bits qui fera déborder le passé de 4 go, ce qui est moins que la moyenne des iPad/iPhone de l'espace libre. Utiliser unsigned long long (ou un uint64_t), et de récupérer la valeur de la NSNumber en 64 bits, int trop l'utilisation de unsignedLongLongValue.
Si vous cherchez à obtenir le reste de l'espace libre à l'aide de Swift, il est légèrement différent. Vous avez besoin d'utiliser attributesOfFileSystemForPath() au lieu de attributesOfItemAtPath():
Edit: mis à Jour pour Swift 1.0
Edit 2: mise à Jour de sécurité, de à l'aide de Martin R répondre.
Edit 3: mise à Jour pour Swift 2.0 (par dgellow)
Voici ma réponse et pourquoi c'est mieux.
Réponse (Swift):
Réponse (Objective-C):
Pourquoi c'est mieux:
NSByteCountFormatter
, sens pas fou calculs manuels d'octets pour les gigaoctets. Apple fait pour vous!NSByteCountFormatter
fait pour vous. E. g. Lorsque l'appareil est en anglais de la chaîne de lire 248.8 MO mais va lire 248,8 mois quand il est français, et ainsi de suite pour les autres langues.Clarification importante (au moins pour moi). Si je connecte mon iPod vers mon Mac c'est l'info a montré par l'iTunes App.
Lorsque j'utilise le code ci-dessus:
La countStyle NSByteCountFormatterCountStyleFile me montrer: 17,41 GO
La countStyle NSByteCountFormatterCountStyleBinary me montrer: 16,22 GO
16,22 GO (NSByteCountFormatterCountStyleBinary) Il est EXACTEMENT le nombre que iTunes App montrez-moi quand je connecte mon iPod vers mon Mac.
Vous pouvez trouver une autre solution avec l'aide de Swift 4 et
extension
qui vous donne une bonne option.Ici est la
UIDevice
extension.Et d'exemples d'utilisation:
!
au lieu de mettre unguard
à la sécuritétypecasting
ounil
vérifier.Pour iOS >= 6.0, vous pouvez utiliser la nouvelle
NSByteCountFormatter
. Ce code récupère le nombre d'octets libres restant comme une chaîne formatée.Mise à jour avec une nouvelle précis API pour obtenir la taille disponible sur le disque disponibles dans iOS11.
Voici la description de la nouvelle API clé de ressource:
Je croix comparé les résultats à partir de la clé "FileAttributeKey.systemFreeSize" et la touche "URLResourceKey.volumeAvailableCapacityForImportantusagekey" et a trouvé les résultats retournés forme "volumeAvailableCapacityForImportantusagekey" correspond exactement à celle de l'espace de stockage disponible affichées sur l'INTERFACE utilisateur.
Ici est la mise en œuvre rapide:
volumeAvailableCapacityForOpportunisticUsageKey
.NSHomeDirectory()
ouNSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
. Quelle est la différence à l'aide de ces deux?Code suivant est rapide, version 3.0 mise en œuvre de la réponse déjà fournie par ChrisJF:
pour Swift comme UIDevice extension
Comment utiliser:
Sortie sera:
Je sais que ce post est un peu vieux, mais je pense que cette réponse peut aider quelqu'un. Si vous voulez savoir les utilisé/libre/total de l'espace disque sur l'appareil vous pouvez utiliser Lumineux. Il est écrit en Swift. Vous n'avez qu'à appeler :
ou
Mise en œuvre rapide de code ci-dessus:-
L'appeler à partir d'une autre classe.
Tout en testant la valeur de retour, il est même, comme indiqué par d'autres applications. Au moins dans mon iPhone 6S+. C'est juste de la mise en œuvre rapide de la ci-dessus montre la réponse. Et pour moi la accepté de répondre ne fonctionne pas.
ChrisJF réponse dans Swift 2.1 version:
Si vous voulez gagner du temps, utilisez la commande suivante CocoaPod de la Bibliothèque. Je ne l'ai pas utilisé mais semble comme il devrait fonctionner.
https://cocoapods.org/pods/SystemServices