Ключом к этому вопросу является понимание внутренней организации диска (она описывается тут в общем, без деталей реализации в разных файловых системах).
Всё пространство диска поделено на последовательные блоки — кластеры (есть еще секторы, дорожки... но это нас не интересует в данном случае). У каждого кластера есть номер. Таким образом мы получаем адресуемое пространство: можем указывать номер кластера и получать доступ к этой порции данных.
Файл не лежит на диске «одним куском». Файл занимает свободные кластеры на диске, и может быть разорван на части (фрагментирован), по этому к файлу нужна сопроводительная информация:
* список номеров кластеров в которых он лежит, заканчивающийся нулём;
* запись оглавления, где содержится имя, атрибуты (только для чтения, системынй, скрытый и т.п., размер, время создания, изменения, последнего обращения к нему), а также номер начального кластера, где лежит файл.
Записи оглавления тоже лежат в определённых кластерах. Если запись описывает файл, то она указывает на кластер, где начинается файл, а если описывает папку — то указывает на кластер, где лежит другое список с оглавлением.То есть когда мы указываем путь к файлу, то можно начиная с корневого оглавления по пробежаться по оглавлениям папок переходя от кластера к кластеру, потом найти запись оглавления для этого файла, и определить где начинается файл и какую имеет длину. А затем пробежаться по списку номеров кластеров, читая каждый кластер и склеивая их содержимое. Последний кластер занят обычно не полностью, по этому какая часть там лишняя нам покажет общая длина файла которую мы взяли из записи оглавления.
Чтобы переместить файл нужно в первую очередь определить, находится ли исходный файл и целевой на одном и том же диске.
1) Если это так, то создаётся новая запись оглавления на новом месте в том оглавлении, которое соответствует целевой папке. А старая запись оглавления для экономии времени не удаляется, а помечается как свободная. Она будет занята при первой возможности. Сам файл и список его размещения на диске при этом не меняются. Перемещение завершено.
2) Если целевой файл находится на другом диске, то в первую очередь происходит копирование файла на новое место. Файл вычитывается так как показано в нелирическом отступлении выше, и записывается в свободные кластеры на другой диск. Как только запись завершена, составляется список размещения файла (цепочка номеров кластеров) и тоже сохраняется в системную область диска. Напоследок в списке оглавления соответствующей папки создаётся запись оглавления для этого файла. Копирование файла завершено. И теперь совсем напоследок происходит удаление исходного файла: запись оглавления помечается как удалённая. Список размещения удаляется. Кластеры, которые ранее занимал этот файл помечаются как свободные. (Я умышленно упустил из объяснения выше, что есть еще одна системная область на диске, где буквально битами (один бит — один кластер) обозначается, какой кластер свободен, а какой занят.)
Вот такая изнурительная работа происходит внутри операционной системы, когда мы перемещаем файлы.
Можно ли восстановить вырезанные файлы?