2009-11-03 8 views
2

Comment puis-je déterminer si un fichier est en cours d'utilisation via VBScript ou un fichier batch? Ce peut être un utilitaire séparé.Comment déterminer si un fichier est en cours d'utilisation?

J'ai jeté un oeil à Handle mais parfois les poignées ne s'alignent pas avec les noms de fichiers, par ex. certaines DLL, et il ne fait pas de recherches partielles (bien que je pourrais vraisemblablement utiliser certains des utilitaires de traitement de texte sur sa sortie complète pour gérer ce côté des choses).

+1

Est-ce "utilisé par un autre processus" ou "en cours d'utilisation par un processus spécifique", c'est-à-dire que vous contrôlez? – Rob

+0

En cours d'utilisation par tout autre processus. – dlanod

Répondre

0

Ce que j'ai fini par utiliser est ListDLLs. Exécuter "listdlls -d | find/c" pid "> temp.txt", puis tester s'il existe des données dans temp.txt semble déterminer si un fichier est utilisé avec succès.

1

Pouvez-vous simplement essayer de faire ce que vous voulez faire au fichier, et signaler une erreur si elle échoue avec une violation de partage?

"Il est plus facile de demander pardon que d'obtenir une permission." - Grace Hopper

Ou si vous voulez savoir à l'avance si une tentative de faire quelque chose de destructeur réussira, vous pouvez essayer de faire quelque chose de non destructif qui nécessite les mêmes autorisations. Donc, si vous voulez savoir si vous pouvez écraser un fichier, essayez de l'ouvrir pour l'ajouter mais n'écrivez rien. Quoi que vous fassiez, vous devez vous méfier des conditions de course - et si quelqu'un d'autre ouvrait le fichier entre votre test et votre fonctionnement actuel?

0

Essayez ceci:

@echo off 
echo.N|copy /-y NUL "%~1">NUL 
if not errorlevel 1 echo not in use 
if errorlevel 1 echo in use 

Crédit: DosTips.com :IsFileOpen

+0

Cela n'a certainement pas fonctionné. Il rapportait tout comme "non utilisé". – dlanod

+1

Il existe plusieurs types de "fichiers ouverts"; Je pense que cette méthode fonctionne uniquement pour les verrous exclusifs, car j'ai testé avec un fichier 'Access LDB' et il a déclaré" en cours d'utilisation "; Je cours Windows 2008 –

Questions connexes