2008-11-04 5 views
2

J'utilise le code suivant pour déterminer l'espace libre sur un volume. Le dossier a été fourni à l'aide de NSOpenPanel. L'élément sélectionné est un volume monté et le chemin est retourné \ volumes \ NomComment trouvez-vous la quantité d'espace libre sur un volume monté en utilisant Cocoa?

NSDictionary* fileAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:folder]; 

unsigned long long size = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];  

Y at-il une meilleure méthode pour déterminer l'espace libre sur un volume monté en utilisant Cocoa?

Mise à jour: C'est en fait le meilleur moyen de déterminer l'espace libre sur un volume. Il apparaissait que cela ne fonctionnait pas, mais cela était dû au fait que le dossier était/Volumes plutôt que/Volume/VolumeName

+0

Pourquoi les barres obliques inverses (\\)? Les chemins POSIX utilisent des barres obliques (/). –

+0

J'ai tapé cela par habitude, travaillant plus souvent dans le monde de Windows. Le chemin est tel qu'il a été extrait de NSOpenPanel. – AlanKley

+0

Je sais que ce fil est vieux, mais je suis tombé dessus pendant que je cherchais le même problème. À quiconque ne vérifierait pas la méthode fournie avec la documentation. fileSystemAttributes est obsolète dans Mac OS X 10.5. Vous devez utiliser la méthode attributesOfFileSystemForPath –

Répondre

1

statfs est cohérent avec les résultats de df. En théorie, NSFileSystemFreeSize vient de statfs, donc votre problème ne devrait pas exister.

Vous pouvez exécuter statfs comme ci-dessous pour remplacer NSFileSystemFreeSize:

#include <sys/param.h> 
#include <sys/mount.h> 

int main() 
{ 
    struct statfs buf; 

    int retval = statfs("/Volumes/KINGSTON", &buf); 

    printf("KINGSTON Retval: %d, fundamental file system block size %ld, total data blocks %d, total in 512 blocks: %ld\n", 
      retval, buf.f_bsize, buf.f_blocks, (buf.f_bsize/512) * buf.f_blocks); 
    printf("Free 512 blocks: %ld\n", (buf.f_bsize/512) * buf.f_bfree); 
    exit(0); 
} 
3

Le code fourni est la meilleure façon à Cocoa pour déterminer l'espace libre sur un volume. Assurez-vous simplement que le chemin fourni à [NSFileManagerObj fileSystemAttributesAtPath] inclut le chemin complet du volume. Je supprimais le dernier composant path pour m'assurer qu'un dossier plutôt qu'un fichier était passé, ce qui a entraîné l'utilisation de/Volumes comme dossier qui ne donne pas les bons résultats.

NSDictionary* fileAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:folder]; 

unsigned long long size = [[fileAttributes objectForKey:NSFileSystemFreeSize] longLongValue];  
Questions connexes