2016-02-01 2 views
2

J'ai un grand répertoire contenant des fichiers qui sont modifiés par un système séparé à des intervalles variables. J'exécute un observateur sur ce répertoire pour détecter quels fichiers sont modifiés.

Je me demande s'il y a une sorte de déclencheur qui se produit lorsqu'un fichier est accédé par le système pour modification. Si oui, ce qui suit s'appliquerait:

En utilisant Java, est-il possible de détecter quels fichiers sont sur le point d'être modifiés et d'effectuer une sauvegarde temporaire avant que cela se produise?
Alternativement, est-il possible de comparer le fichier nouvellement modifié par rapport à sa version précédente?Détecter un fichier qui sera modifié

Dans ce scénario, il est impossible de sauvegarder tous les fichiers car les fichiers sont volumineux et nombreux.

Exemple:

J'ai quatre fichiers:

a.xml 
b.xml 
c.xml 
d.log 

b.xml a une nouvelle section ajouté.

Est-il possible de copier la section nouvellement créée dans d.log?

+1

La façon dont vous y allez. écrire un service quelconque qui permettrait au processus de demander, modifier et valider un "fichier", mais ce n'est pas une tâche simple. Une autre approche pourrait consister à sauvegarder tous les fichiers d'abord, puis, comme ils sont modifiés, vous pourriez générer une forme d'historique, mais encore une fois, cela devient compliqué – MadProgrammer

Répondre

1

Non, vous ne pouvez pas détecter un fichier qui Il est préférable de conserver une version sauvegardée des fichiers, mais je commencerai par examiner certaines considérations relatives à la conception du système de gestion du code source.

+0

Cela semble intéressant. Merci pour ça. Je suis encore assez novice en programmation et je me demandais s'il y avait un moyen de le dire, alors qu'il est en train de se modifier, un peu comme si certains fichiers avaient un nom ajouté par un "~". Merci pour le conseil, je vais jeter un coup d'oeil! – JaffolasCage

+1

si vous avez le contrôle sur le programme modificateur, il devient assez simple. L'un des principaux problèmes avec l'approche de "détection de modification de fichier externe" est qu'il n'y aurait aucun moyen de s'assurer que vous sauvegardez une ancienne version du fichier et qu'elle n'a pas déjà été modifiée. – awd

+0

Même si vous savez que votre programme crée un fichier temporaire (avec un ~ ou un tel), dans certains cas votre fichier aurait déjà été modifié avant que vous puissiez le détecter et faire une sauvegarde. – awd

1

Comment sauriez-vous si les fichiers sont sur le point d'être modifiés? Le système gère tous les fichiers IO. La seule façon de le faire est de faire en sorte que le programme qui effectue la modification déclenche la sauvegarde, puis effectue les modifications. Pour comparaison, cela dépend de ce que vous voulez. Si vous voulez une comparaison ligne par ligne, cela devrait être assez simple à faire en utilisant les classes IO de Java. Si vous voulez juste vérifier s'ils sont identiques ou non, vous pouvez utiliser une somme de contrôle sur les deux fichiers.

3

Je peux penser à une façon qui pourrait être une solution possible à votre problème. « Maintenir un fichier journal qui suit la date lastModified de chaque fichier et vous pouvez vérifier quel fichier a été modifié en utilisant votre fichier journal

-. Jitendra

+1

Mais ce type veut détecter tout changement de fichier avant que ce fichier ne soit réellement changé. – Bunti