Scruter les volumes montés sur le bureau

UniXUniX Membre
07:44 modifié dans API AppKit #1
Salut le forum.

Je voudrais implémenter une fonction qui scrute les volumes montés sur le bureau (notamment les CD ou disques externes), pour ensuite effectuer un traitement.

Je pensais faire ça par le biais d'un NSTimer que je lancerais en boucle toutes les 4 ou 5 secondes au démarrage de l'application.
Par contre je ne sais pas comment m'y prendre pour lister les volumes présents.

Réponses

  • 07:44 modifié #2
    NSWorkspace a tout ce qu'il faut pour cela, dont une série de notifications qui informent du mount/unmount de volumes.
  • UniXUniX Membre
    07:44 modifié #3
    Cool, je vais regarder ça de près ...!

    Merci pour ton aide.
  • MathMath Membre
    07:44 modifié #4
    Salut,

    Je vais t'aider car j'utilise bcp ce que tu cherches dans mes 2 ou 3 app.

    Tout d'abord les notifications, y en a deux qui te permettent de savoir quand un périphérique amovible est branché ou débranché :

    <br />[[workSpace notificationCenter] addObserver:self selector:@selector(refreshMedia:) name:NSWorkspaceDidMountNotification object:nil];<br />[[workSpace notificationCenter] addObserver:self selector:@selector(refreshMedia:) name:NSWorkspaceDidUnmountNotification object:nil];<br />
    


    Ensuite la méthode refreshMedia qui est appelée :

    <br />- (void)refreshMedia:(NSNotification *)notification<br />{<br />	NSArray *allVolumes = [workSpace mountedLocalVolumePaths/*mountedRemovableMedia*/];<br />	NSEnumerator *e = [allVolumes objectEnumerator];<br />	<br />	NSString *volumePath = nil;<br />	<br />	while (volumePath = [e nextObject])<br />	{<br />		if ([fileManager isWritableFileAtPath:volumePath])<br />		{<br />			NSLog(@&quot;Got Media : %@&quot;, volumePath);<br />		}<br />	}<br />}<br />
    


    Voila, ça liste tout simplement les périphériques amovibles. Petite précision, avec mountedRemovableMedia tu n'as pas les disques USB et/ou firewire, juste l'iPod et quelques autres disques amovibles. Et avec mountedLocalVolumePaths tu as les disques réseaux et les disques locaux.

    Autre chose, tu peux avoir des détails sur le disque qui est monté ou démonté avec la notification.

    Voila, A+
  • UniXUniX Membre
    07:44 modifié #5
    Bon, je viens de lire ton message, et j'étais arrivé à  recevoir les notifications du NSWorkspace.
    Par contre, et c'est tout con ..., je bloques pour récupérer le path du volume à  partir de la notification envoyée ....
    [[notification object]objectForKey:@&quot;NSDevicePath&quot;];
    

    J'ai essayé tout un tas de choses autour de ça, mais ça plante à  chaque fois .....
  • Eddy58Eddy58 Membre
    07:44 modifié #6
    C'est normal, l'objet renvoyé est la shared instance NSWorkspace. Il faut passer par la méthode userInfo pour obtenir le dictionary. :)
    [tt]
    [[notification userInfo] objectForKey:@NSDevicePath];
    [/tt]
  • MathMath Membre
    07:44 modifié #7
    Ouais, faut utiliser le userInfo.

    Sinon, vu qu'on parle de notifications, il existe NotificationWatcher qui permet de voir toutes les notifications qui "passent" dans le système (message purement informatif ;) ).
  • UniXUniX Membre
    07:44 modifié #8
    Cool, nickel, merci  ;) ;) ;)
  • tabliertablier Membre
    07:44 modifié #9
    Pour récuperer les noms des volumes montés, utiliser éventuellement la commande shell:
    ls /Volumes
Connectez-vous ou Inscrivez-vous pour répondre.