vérifier si un fichier est ouvert ?

Le
unbewusst.sein
avant utilisation d'un fichier de données, par un script, je voudrais
vérifier s'il est déja ouvert par une application, comment faire ?
est il possible de connaître l'application qui l'a ouvert ?

--
« L'essence même du génie, c'est de mettre en pratique
les idées les plus simples. »
(Charles Peguy)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
unbewusst.sein
Le #21353471
Une Bévue
avant utilisation d'un fichier de données, par un script, je voudrais
vérifier s'il est déja ouvert par une application, comment faire ?
est il possible de connaître l'application qui l'a ouvert ?



bon j'ai essayé avec lsof
si mon fichier est ouvert dans TextEdit et dans TextMate lsof ne voit
rien par contre, s'il est juste sélectionné dans le Finder j'obtiens :
zsh-% lsof /Users/yt/dev/Signature/signatures.txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Finder 106 yt 14r REG 14,2 3082 7364119
/Users/yt/dev/Signature/signatures.txt

avec cette vérification, ce que je souhaite éviter est de lire un
fichier qui est en train d'être édité par ailleurs...

donc ni fuser ni lsof ne semblent me donner la bonne réponse...
--
« L'essence même du génie, c'est de mettre en pratique
les idées les plus simples. »
(Charles Peguy)
Éric Lévénez
Le #21354201
On 10/03/10 10:29, Une Bévue wrote:

avec cette vérification, ce que je souhaite éviter est de lire un
fichier qui est en train d'être édité par ailleurs...



En toute logique tu ne peux pas. lsof permet de voir si un descripteur
de fichier est actuellement utilisé, pas qu'un fichier est utilisé. La
différence est qu'un programme peut lire un fichier sans le garder
ouvert (contrairement à une vieille habitude Windosienne). De plus
certains éditeurs, lors de la sauvegarde, créent un deuxième fichier, le
premier étant supprimé si l'écriture s'est bien passé.

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.
Frédéric Testuz
Le #21354541
Une Bévue vient de nous annoncer :
avant utilisation d'un fichier de données, par un script, je voudrais
vérifier s'il est déja ouvert par une application, comment faire ?
est il possible de connaître l'application qui l'a ouvert ?



Question régulièrement vue sur cocoa-dev. La réponse qui revient chaque
fois c'est : on ne teste pas.

En plus développé : tu testes si un fichier est déjà ouvert, tu obtiens
une réponse négative, donc tu te dis que tu peux écrire dans ce
fichier. Mais entre le moment où tu as eu ta réponse et le moment où tu
écris, un autre process s'est accaparé le fichier. Résultat ton
écriture échoue et tu as une erreur.
Donc tu dois prévoir une gestion d'erreur d'écriture.

Par conséquent, la solution préconisée est : tu écris sans te préocuper
des autres process et tu gères l'erreur éventuelle.

De toute façon, comme l'a dit Eric, beaucoup des programmes lisent les
données puis referment immédiatement le fichier. Donc on ne peut pas
savoir si un fichier est en cours d'édition par un programme.

--
Frédéric
unbewusst.sein
Le #21354801
Éric Lévénez
En toute logique tu ne peux pas. lsof permet de voir si un descripteur
de fichier est actuellement utilisé, pas qu'un fichier est utilisé. La
différence est qu'un programme peut lire un fichier sans le garder
ouvert (contrairement à une vieille habitude Windosienne). De plus
certains éditeurs, lors de la sauvegarde, créent un deuxième fichier, le
premier étant supprimé si l'écriture s'est bien passé.



oui, merci pour ta réponse, c'est ce que je viens d'expérimenter avec
lsof ou fuser, seule la sélection par le Finder est visible par script.

bon, c'est +/- une "bonne" nouvelle, ça veut dire que je n'ai pas à m'en
soucier (à moins que le fichier soit sélectionné par le Finder dans le
cas où un user voudrait le changer de nom ou de place).

--
« L'essence même du génie, c'est de mettre en pratique
les idées les plus simples. »
(Charles Peguy)
unbewusst.sein
Le #21354791
Frédéric Testuz
Par conséquent, la solution préconisée est : tu écris sans te préocuper
des autres process et tu gères l'erreur éventuelle.

De toute façon, comme l'a dit Eric, beaucoup des programmes lisent les
données puis referment immédiatement le fichier. Donc on ne peut pas
savoir si un fichier est en cours d'édition par un programme.



oui, oui, merci, j'en étais arrivé à cette même conclusion...
--
« L'essence même du génie, c'est de mettre en pratique
les idées les plus simples. »
(Charles Peguy)
Patrick Stadelmann
Le #21354901
In article (Une Bévue) wrote:

bon, c'est +/- une "bonne" nouvelle, ça veut dire que je n'ai pas à m'en
soucier (à moins que le fichier soit sélectionné par le Finder dans le
cas où un user voudrait le changer de nom ou de place).



Très souvent, on édite un fichier que l'on vient d'ouvrir dans le
Finder, donc qui y est encore sélectionné. Ca ne pose aucun souci.

Patrick
--
Patrick Stadelmann
unbewusst.sein
Le #21355051
Patrick Stadelmann
Très souvent, on édite un fichier que l'on vient d'ouvrir dans le
Finder, donc qui y est encore sélectionné. Ca ne pose aucun souci.



oui, donc je testerai le Finder.
--
« L'essence même du génie, c'est de mettre en pratique
les idées les plus simples. »
(Charles Peguy)
Publicité
Poster une réponse
Anonyme