2010-06-02 11 views
1

Je suis en train d'obtenir un verrou de fichier sur un point de montage via Java 6 sur Mac OS X:Un fichier ouvert en Java peut-il être verrouillé sur un montage afp?

private void tryLockThroughShare() { 
     String path = "/Volumes/Groups/mcm/javaTestInShare.txt"; 

     try { 
      RandomAccessFile raf = new RandomAccessFile(path, "rw"); 
      FileLock flock = raf.getChannel().tryLock(); 
      System.out.printf("File %s is %s\n", path, (flock != null) ? 
("locked") : ("not locked")); 
      raf.write("yoo hoo!".getBytes()); 
      raf.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

Quand je monte un volume à l'aide de l'AFP ou SMB, même si je peux écrire des fichiers dans la destination montée , Je ne peux pas les verrouiller, en recevant à la place: IOException (Opération non prise en charge). Après quelques expériences, j'ai trouvé que je pouvais verrouiller lorsque le volume a été configuré en utilisant NFS.

Est-ce que quelqu'un a trouvé un moyen de verrouiller un fichier sur un support SMB ou AFP?

Répondre

1

L'exception que vous obtenez dit tout IOException (Operation not supported). Différents systèmes de fichiers ont des capacités différentes et le verrouillage est l'un d'entre eux. Le Wikipedia Comparison of file systems bien qu'il ne mentionne pas le verrouillage rend vraiment ce point clair. Lorsque vous accédez à des fichiers via SMB ou AFP, vous les utilisez efficacement en tant que système de fichiers et ce sont des systèmes de fichiers qui ne sont pas très riches en fonctionnalités. Malheureusement, vous ne pouvez pas supposer que toutes les fonctionnalités du système de fichiers réel sur lequel les fichiers sont stockés seront disponibles via SMB ou AFP. L'objectif du protocole SMB est de fournir un accès partagé aux fichiers, imprimantes et autres sur un réseau, car les périphériques sur le réseau sont hétérogènes, le protocole limite sa fonctionnalité aux fonctionnalités les plus universellement supportées.