2013-06-30 5 views
2

Я планирую один маленький проект просто для удовольствия, поэтому я не знаю, буду ли я использовать C++ или JAVA. Поэтому я спрашиваю информацию для обоих этих языков.Как читать определенный файл, если он был перемещен

Теперь я опишу ситуацию, что возможно. Допустим, у меня есть файл C:\Users\T3\My Documents\Downloads\My file.txt. Выполнение потока программы Я сохраняю этот каталог и использую его для получения содержимого этого файла. Но пользователь может переместить этот файл в другой каталог, пусть это будет C:\Users\T3\My Documents\Files\My file.txt. Теперь, если я использую предыдущий каталог, я не дойду до этого файла. Но поскольку я знаю, что файл остается в одном месте на диске, позвоните ему 0x1234567890. Перемещение файла просто изменяет некоторые данные в файловой системе NFTF/ext4/... или некоторые.

Там будет один или два проблемных ситуаций:

  1. Если файл был перемещен на другой диск. Его невозможно достичь.
  2. Если файл был перемещен на другой раздел того же диска. Не уверен, что в этом можно достичь этого, но может быть.

Мой вопрос: как получить этот адрес на диске (я назвал его 0x1234567890) и как читать данные из файла, зная этот адрес.

+0

Файл с открытым файлом можно открыть только с использованием стандартного API файловой системы. Инструменты восстановления работают на более низком уровне. – user2246674

+0

Можете ли вы заблокировать файл, пока используете его, пока не закончите? – Prix

+0

@Prix Я не могу заблокировать файл, потому что пользователь может изменить каталог файлов не в потоке программы. – ST3

ответ

2

Я поговорю с точки зрения java. Java делает управление памятью самостоятельно и никогда не предоставляет их, поэтому вы не получите api для получения адреса памяти файла.

Хотя есть способ записи по определенному адресу памяти, а затем доступа к данным с этого адреса, используя класс sun.misc.Unsafe. В этой статье объясняется: http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java

Итак, ваш подход к извлечению данных из адреса памяти приведет к проблемам. Вы должны скорее проверить свою логику и посмотреть, как заблокировать файл или поместить пути к файлам в каком-то централизованном месте, в котором также будет сохранен измененный путь.

+0

После прочтения этой статьи выяснилось, что ей не предлагается делать. Вы когда-нибудь пробовали это и что может случиться? Кроме того, либо я неправильно понимаю это, либо не описан способ ** читать ** из памяти. – ST3

+0

Обычно эти классы предназначены для экспериментирования и понимания цели, поскольку java не документирует их и может изменять или удалять их по мере необходимости. Ничто не гарантирует их, поскольку они не предназначены для общего использования. – Lokesh

Смежные вопросы