В системах Windows, переименование файлов функционально похоже на их удаление?

9

Согласно моему пониманию файловой системы Windows, программа может читать файл в соответствии с его путем, если этот путь изменяется, то любая программа, использовавшаяся для чтения этого файла, больше не может этого делать. Это будет означать, что для любых программ в системе Windows, которые зависят от файла, последствия удаления и переименования файла должны быть одинаковыми.

Конкретный случай, от которого зависит этот ответ, - это встроенная система, работающая на Windows 2000, руководство поставщика услуг направляет пользователя на удаление файлов в папке. Как осторожный пользователь, я просто скопировал файлы в папку с именем folder_backup и оставил папку пустой.

Во время этой операции система регрессировала и не смогла нормально функционировать. Поэтому был назван поставщик услуг, который написал руководство. Их диагностика заключалась в том, что база данных была повреждена, потому что параллельно было две базы данных, указывая на «folder_backup» в качестве второй базы данных. Насколько я понимаю, файлы внутри «D: / folder_backup» были бы инертными, исключая исключительный случай, когда программа искала папки, начинающиеся с «folder», или читала все содержимое в файле «D: /».

Какими неясными способами система может получить доступ к переименованному файлу, что в противном случае было бы невозможно, если бы файл был удален?

Томас Зубири
источник
1
Вы действительно скопировали файлы (имея две копии в какой-то момент, а затем удалили оригинал) или просто переместили их?
GSerg
1
Была система работает во время чтения этих баз данных? В Windows (в том числе и в Linux) можно копировать файлы, когда они открыты (в зависимости от того, как приложение открывает файлы в определенных «режимах»). Это, вероятно, приведет к повреждению копий, кстати.
Давидбак
@davidbak Отрицательно, приложение было закрыто при переименовании файлов.
Томас
@GSerg Я полагаю, что я переименовал папку, а затем позволил настройке приложения воссоздать ее.
Томас
Сравните с файловыми системами Unix, где идентификатор файла представляет собой целое число, а имя файла на самом деле представляет собой только сопоставление имен с идентификатором, и файл не удаляется, пока у него нет имен и нет открытых процессов. Переименование файла в Unix добавляет новое сопоставление имен, а затем удаляет старое имя, поэтому файл ни в коем случае не удаляется.
Raedwald

Ответы:

16

Избалован на выбор действительно.

Гарри Джонстон
источник
Вау, я не ожидал, что будет так много способов что-то сломать, переименовав файл. Спасибо!
Томас
@ wizzwizz4 2000 - это NT
zdimension
-2

Переименованный файл все еще может быть доступен другой программе.

  • Одним способом, которым переименованный файл может все еще быть доступным для другой программы, является переменная среды, которая задается для нового пути к файлу той же самой программой, которая переименовала файл. Программа, которая хочет получить доступ к указанному файлу, использует переменную среды для пути к файлу вместо фиксированного внутреннего пути к файлу.

  • Другой способ - файл должен быть единственным файлом в определенной папке. Программа, которая хочет использовать этот файл, знает, что в этой конкретной папке никогда не должно быть более одного файла, но знает, что имя файла может измениться, но каталог, к которому он принадлежит, останется прежним. Программа просто использует первый найденный файл в этой папке, который всегда должен быть этим файлом. Однако это не очень хорошая практика, и вам лучше использовать переменную окружения.

В противном случае некоторые программы автоматически просят пользователя найти файл перед продолжением выполнения его кода.

J03L
источник