В системах 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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.