Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vérifier si un fichier est ouvert ?

7 réponses
Avatar
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)

7 réponses

Avatar
unbewusst.sein
Une Bévue wrote:

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)
Avatar
Éric Lévénez
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 -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Avatar
Frédéric Testuz
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
Avatar
unbewusst.sein
Éric Lévénez wrote:

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)
Avatar
unbewusst.sein
Frédéric Testuz wrote:

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)
Avatar
Patrick Stadelmann
In article <1jf56yx.1u70aqc1kqhmajN%,
(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
Avatar
unbewusst.sein
Patrick Stadelmann wrote:

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)