Aller au contenu

Messages recommandés

Posté(e) (modifié)

Bonjour à tous et toutes,

 

Je lance (startapp "notepad" "\\monfichier1.dat")) sur un bouton.

 

Pour recharger ce fichier DAT ouvert et modifiable : je dois l'enregistrer et le fermer éventuellement.

 

Comment demander en Vlisp si un fichier est ouvert ou fermé ? Je cherche tout simplement à proposer de recharger son contenu dans un process.

Je ne sais plus comment faire et pourtant je suis convaincu que ca n'est pas difficile.

 

Hoppla bonne semaine.

Modifié par Tramber
orthographe

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Salut,

 

j'utilise ce code dans une de mes routines:

(setq file (open "\\monfichier1.dat" "a"))
(if (= file nil) 
   (progn
       (alert "Erreur, fichier ouvert par une autre application\nVeuillez la fermer et recommencer.")
       (exit)
   )
   (close file)
)

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Posté(e)

Alors ça c'est pas bête !

Je vais regarder si je peux implémenter mais je pense que ça va marcher. Il fallait y penser.

Merci.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Je suis en chemin complet dans OPEN.

Mais n'empêche. Ton code ne fonctionne pas chez moi. Ouvert ou fermé, le fichier est toujours trouvé par OPEN.

Et la doc ne décrit pas le phénomène que tu suggères.

?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

  (setq SFO (vlax-create-object "Scripting.FilesystemObject") )
 (vl-catch-all-apply 'vlax-invoke-method (list SFO 'getfile "..\\fichier.dat"))

 

J'en suis là, car je pense que c'est une solution. Mais j'attends votre aide car je patauge... ;)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Pas d'aide ?

Pas grave, je me suis débrouillé.

Dans les property de mon 'getfile, j'ai bien trouvé les Attributes mais la valeur ne varie pas suivant que le fichier est ouvert, fermé,..etc.

Dommage.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Salut,

 

Pas vraiment d'idée...

 

Mais je demande pourquoi, tant qu'à faire, ne pas utiliser la méthode "OpenAsTextStream" au lieu de startapp, tu aurais peut être plus de contrôle dans ton process.

 

Je dis ça sans avoir essayé quoi que ce soit...

 

Des liens qui traite du sujet

http://www.cadtutor.net/forum/showthread.php?61300-I-need-a-way-to-check-if-a-pdf-file-is-open

http://www.thecadforums.com/autocad-customization/24700-readfile-and-writefile-via-vlisp-activex.html

 

Tu as aussi:

http://www.menziengineering.ch/Downloads/Download.htm#34

Peut être en s'appuyant sur "DateLastAccessed"

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

C'est vrai que ce site suisse est bourré de lisps très instructifs. Je vois enfin ces drapeaux d'attributs grâce à toi. Et je comprends. J'avais pensé aux dates d'accès, j'avais vu ces propriétés.

 

Mais l'idée du Stream est notée au stylo bille ;)

Je vais voir si j'y trouve mon compte.

 

Merci !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Merci Bonus pour les pistes. Mas ca ne donne rien de bon...

Tant pis :huh:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Salut,

 

J'ai un peu regardé, et je ne vois rien qui corresponde pour vlisp (mais je suis loin d'être un spécialiste ActiveX).

 

De plus, le fait qu'un fichier soit ouvert n'est pas significatif quant aux possibilités d'accès à ce fichier.

En .NET quand on ouvre (ou crée) un fichier dans un flux (Stream) en lecture ou écriture, on peut préciser comment ce fichier est partagé pour d'autres flux (voir ici).

Donc tout dépend de comment la ou les applications qui auraient ouvert le fichier le partagent.

 

Je ne suis pas sur de comprendre ce que tu veux faire, mais la méthode de vincentp010 avec open "a" ou "w" (qui démarre un flux en écriture) devrait indiquer, non pas si fichier est ouvert ou non mais s'il est partagé en écriture.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Oui, c'est bien le problème, la fonction OPEN ne m'est utile en rien.

Pour tout ce qui a été dit, on est effectivement sans solution.

 

Je suis assez étonné, je pensais que ca serait l'histoire d'une ou 2 suggestion qui fonctionnent....avec, effectviement, un autre ActiveX que celui que nous connaissions pour les textes.

 

Il y a bien le code de Lee Mac, mais ca ne marche pas. Pas grave du tout. J'ai un bouton qui change d'aspect quand le fichier est ouvert. Mais on ne parvient pas à savoir si il a été fermé à temps t.

Pas grave.....

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Salut

 

La solution serait peut-être de regarger la liste des fichiers ouvert avec wmi.

Une autre idée, si tu souhaites utiliser Scripting.FilesystemObject est soit de renommer le fichier et une erreur est produite si le fichier est déjà ouvert (testé avec un document ouvert avec le bloc note, et le fichier a été renommé, pas d'erreur :( ) ou de le déplacer (pas testé, mais vu sur divers forums)

 

Mais, c'est quoi qui bloque exactement pour ne pas utiliser la solution avec open ?

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut Patrick_35.

Je n'utilise pas OPEN dans mon processus principal mais startapp avec le notepad.

(d'ailleurs s'il n'est pas installé, ce qui arrive, ca ne marche pas tant pis pour l'utilisateur !)..

 

C'est une boite d'options ObjectDCL.

Soit un bouton.

 

ETAT_1 : Image d'un crayon. Quand on clique, le fichier s'ouvre avec le notepad

ETAT_2 : Image "recyclage". Quand on clique, le fichier et lu par OPEN.

 

Mais à la fin du processus dand l'état_2 je voudrais ne revenir à l'état_1 que si le fichier a été fermé. Il ne me dérange pas qu'il reste ouvert dans le notepad et que je le recharge plus tard mais je voudrais le détecter et empêcher de rebasculer trop facilement en etat_1.

 

Alors rien ne marche parmi 4 ou 5 pistes. Même pas le vl-file-rename sur 2011.

Il me reste wmi mais j'avoue que je n'arrive pas à démarrer...

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Alors, le plus simple est de rechercher dans les process (avec wmi pour info). Tu retrouves le fichier ouvert.

(defun recherche_process(qui / item lst meth1 meth2 obj WMI)
 (setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
       meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil)
       meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process")
 )
 (vlax-for item meth2
   (and (setq obj (vlax-get item 'CommandLine)) (vl-string-search (strcase qui) (strcase obj))
     (setq lst (cons obj lst))
   )
 )
 (foreach item (list WMI meth1 meth2)
   (vlax-release-object item)
 )
 lst
)

 

Par exemple

(recherche_process "notepad")

("\"C:\\WINDOWS\\system32\\notepad.exe\" \"C:\\Documents and settings\\Mon_login\\Local Settings\\Temp\\wzd75d\\Mon_fichier.txt\"")

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Magnifique !

Question subsidiaire (due à mon ignorance crasse) : ca sera toujours "Select * from Win32_Process" ?

 

MErci Bien ;)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Je suis en chemin complet dans OPEN.

Mais n'empêche. Ton code ne fonctionne pas chez moi. Ouvert ou fermé, le fichier est toujours trouvé par OPEN.

Et la doc ne décrit pas le phénomène que tu suggères.

?

En fait je m'en sert avec word et il doit y avoir un verrouillage du fichier par word pour ne pas le modifier, ce que ne fait pas notepad.

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Posté(e)

Tu ouvres du Word avec Open !!!

Mais en effet, Notepad ne vérouille rien, c'est certain.

 

je repense à la formule de LeeMac : c'est peut-être pour la même raison.

 

La routine de Patrick_35 va m'aider. Elle prend de la ressource, en tous cas, je sens qu'elle demande du temps processeur. Mais j'en fait mon affaire.

 

Merci à tous et à bientôt.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Salut Tramber

 

Tout dépend de Microsoft, mais je pense que cela ne devrait pas changer en raison du portage des applications.

Reste à voir si avec un 64 bits, cela fonctionne correctement.

 

Pour ta culture perso, tu as une doc en français.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

En effet, le NotePad est bien présent dans cette famille alors que je suis en 64 bits. C'est un portage.

A moi donc de surveiller le prochain OS. Avec AutoCAD, sauf Mac, on est au moins tranquille avec une chose : c'est PC+Windows dans 99,64% des cas !

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité