2013-06-30 2 views
2

Je planifie un petit projet juste pour m'amuser, donc je ne sais pas si je vais utiliser C++ ou JAVA pour le moment. Donc, je demande des informations pour ces deux langues.Comment lire un fichier spécifique s'il a été déplacé

Maintenant, je vais décrire la situation, ce qui est possible de se produire. Disons que j'ai le fichier C:\Users\T3\My Documents\Downloads\My file.txt. Faire un flux de programme Je sauvegarde ce répertoire et je l'utilise pour obtenir le contenu de ce fichier. Mais l'utilisateur peut déplacer ce fichier dans un autre répertoire, qu'il soit C:\Users\T3\My Documents\Files\My file.txt. Maintenant, si j'utilise le répertoire précédent, je n'atteindrai pas ce fichier. Mais comme je sais que le fichier reste au même endroit sur le disque, appelons le 0x1234567890. Le déplacement de fichier modifie simplement certaines données dans le système de fichiers NFTF/ext4/... ou certains.

Il y aurait une ou deux situations problématiques:

  1. Si le fichier a été déplacé vers un autre disque. Il est impossible de l'atteindre.
  2. Si le fichier a été déplacé vers une autre partition du même disque. Je ne sais pas si dans ce possible pour l'atteindre, mais il pourrait être.

Ma question est comment obtenir cette adresse sur le disque (je l'ai appelé 0x1234567890) et comment lire les données du fichier en connaissant cette adresse.

+0

Vous pouvez uniquement ouvrir un fichier avec un chemin d'accès à l'aide de l'API de système de fichiers standard. Les outils de récupération fonctionnent à un niveau inférieur. – user2246674

+0

Ne pouvez-vous pas verrouiller le fichier pendant que vous l'utilisez jusqu'à ce que vous ayez terminé? – Prix

+0

@Prix Je ne peux pas verrouiller le fichier parce que l'utilisateur peut changer le répertoire du fichier pas dans le déroulement du programme. – ST3

Répondre

2

Je vais parler de la perspective java. Java s'occupe de la gestion de la mémoire et ne les expose jamais, donc vous n'obtiendrez pas api pour récupérer l'adresse mémoire d'un fichier.

Bien qu'il existe un moyen d'écrire à une adresse mémoire particulière, puis d'accéder aux données à partir de cette adresse à l'aide de la classe sun.misc.Unsafe. Il est expliqué dans ce post: http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java

Donc, pour résumer, votre approche de récupération de données à partir de l'adresse mémoire entraînera des problèmes. Vous devriez plutôt modifier votre logique et chercher à verrouiller le fichier ou placer les chemins de fichiers à un emplacement centralisé qui stockera également le chemin modifié.

+0

Après avoir lu cet article, découvert, ce qu'il n'est pas offert de le faire. L'avez-vous déjà essayé et que peut-il arriver à faire? Aussi, soit je me méprends, soit il n'y a pas de façon de ** lire ** de la mémoire. – ST3

+0

Généralement, ces classes sont destinées à l'expérimentation et à la compréhension car java ne les documente pas et peut les modifier ou les supprimer au fur et à mesure de leurs besoins. Rien n'est garanti à leur sujet car ils ne sont pas destinés à un usage général. – Lokesh

Questions connexes