Suppression de fichier Node.js
Je suis l'aide d'un noeud dans un environnement Windows.
Lorsque j'utilise fs.unlinkSync(nom de fichier), il semble fonctionner.
Après la unlinkSync instruction est exécutée, si je fais un fs.existsSync(nom de fichier), elle retourne false pour indiquer que le fichier n'existe pas, mais quand je vais à l'entraînement physique, je peux encore voir le fichier.
À ce point dans le temps, si j'essaie de le supprimer manuellement le fichier, il jette l'Accès est refusé.
Toutefois, le fichier est automatiquement supprimé du système de fichiers uniquement lorsque j'arrête l'exécution du nœud fichier de script.
Est-ce le comportement attendu?
- Je suis pratiquement certaine que cette situation se produit car le fichier est verrouillé par Windows pour une raison quelconque. Ce comportement fait partie de la DeleteFile SDK donc il n'y a pas beaucoup de Node.js pouvez faire à ce sujet.
- Vous aurez besoin de montrer plus de code. Si le fichier a été ouvert et non fermé correctement, la dissocier de l'opération est en attente de se produire après le processus s'arrête.
Vous devez vous connecter pour publier un commentaire.
Si le fichier a été ouvert et non fermé à l'intérieur de votre NodeJS code, vous rencontrerez le problème que vous rencontrez. C'est à se comporter comme prévu, sur Windows.
Prendre ce code par exemple:
Si le code utilise
openSync
et puiscloseSync
sur le fichier, le fichier est immédiatement supprimé lorsqueunlinkSync
est appelé. Si toutefois, vous deviez supprimer lecloseSync
appel, vous verrez que le fichier est supprimé uniquement lorsque la NodeJS processus proprement sorties. C'est juste un exemple d'une façon de provoquer ce problème se produit.Si vous utilisez une bibliothèque tierce qui est du traitement de fichiers, etc., il est possible que le code n'est pas fermer correctement le fichier/poignées de descripteurs et vous serait également rencontrer ce problème (pour la même raison).
Pour info: Le fichier semble être supprimé immédiatement si vous testez ce code sur un système d'exploitation basé sur Linux. C'est une différence de comportement entre les systèmes d'exploitation et de la façon dont les fichiers sont supprimés.
Détails
Quand NodeJS sur Windows supprime un fichier, il n'est effectivement pas à l'appel d'une API pour supprimer directement un fichier. Au lieu de cela, c'est à l'aide d'un faible niveau de la fonction appelée
ZwSetInformation
(référence). Avec cette fonction, c'est la définition d'un champ appeléDeleteFile
à VRAI pour le fichier spécifié (manche). C'est utilisé de sorte que lorsque tous les descripteurs de fichiers sont fermés pour ce fichier, il sera automatiquement supprimé. Fichiers en NodeJS sont ouverts avec le mode d'accès de FILE_SHARE_DELETE de sorte qu'ils peuvent être supprimés correctement par l'utilisation de l'autre fonction.