Это зависит от многих факторов, включая выбранный вами редактор, файловую систему и технологию хранения ...
редактор
Некоторые редакторы просто переписывают файл.
Однако многие редакторы создают временный файл, который записывается до завершения, а затем переименовывается для замены старого файла. Это делает операцию сохранения "атомарной", то есть файл обязательно будет содержать либо A) старый контент, либо B) новый контент. Запись файла "на месте" открывает потенциальные возможности для частично записанных файлов или повреждения в случае сбоя в работе части системы (например, при сбое питания или сбое приложения).
Рассмотрим следующий псевдокод / шаги:
# user opens file "myfile.txt"
f = open("myfile.txt", "r")
buffer = f.read()
# user edits file in-memory
# saves file as "myfile.txt"
f = open("_myfile.txt", "w")
f.write(buffer)
f.close()
rename("_myfile.txt", "myfile.txt")
Если вас интересуют технические детали, то вам может быть интересно узнать, что при использовании такого редактора идентификатор файла / индекса файла может изменяться при каждом сохранении ... Мы начинаем философскую дискуссию о том, что на самом деле " файл " ... А пока давайте рассмотрим « файл » как данные, доступные в именованном месте в файловой системе (имя файла).
Файловая система
Даже если ваш редактор "тупой" и просто переписал содержимое файла, используемая файловая система потенциально способна записывать "новые" данные в любом месте, которое она сочтет подходящим, и в некоторых случаях они будут выполнять аналогичную технику. выше - записать новый блок до завершения, а затем заново связать таблицу файлов.
Это может быть необходимо по ряду причин, включая вероятность того, что в этом месте недостаточно свободного места для новых данных.
Технология хранения (диск)
Когда вы рассматриваете SSD, дела идут еще дальше. Когда вы "записываете в физическое местоположение" на SSD, вы фактически записываете в совершенно не связанную по- настоящему физическую область во флэш-памяти, которая вам совершенно неизвестна - SSD сохраняет карту "физических" и "истинно физических" блоков ,
SSD-накопители и другие флэш-накопители, как правило, также записывают данные на предварительно стертые страницы (поскольку это быстрее и удобнее), а не стирают данную страницу, чтобы перезаписывать туда. Это также помогает при выравнивании износа, в противном случае работа с текстовым файлом в течение дня может привести к износу ячеек, если их содержимое постоянно находится в одних и тех же физических ячейках флэш-памяти.
Заключение
Итак ... учитывая предоставленную вами информацию, я подозреваю, что очень маловероятно, что простое « изменение текста в файле » фактически удалит старый текст из постоянного хранилища.
доказательство
Хотите попробовать сами? Запустите это в Linux:
Создайте файловую систему и смонтируйте ее:
$ truncate -s $(( 10 * 1024 * 1024 )) myfs.ext2
$ mkfs.ext2 ./myfs.ext2
mke2fs 1.42.13 (17-May-2015)
Discarding device blocks: done
Creating filesystem with 10240 1k blocks and 2560 inodes
Filesystem UUID: 42d13441-a9c1-44e1-9310-275c92c60f15
Superblock backups stored on blocks:
8193
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
$ mkdir mnt
$ sudo mount -o loop ./myfs.ext2 ./mnt
$ sudo chown attie: ./mnt
Проверьте заранее, чтобы видеть, находится ли " Hello " в том, что фактически является данными диска (это не так):
$ grep "Hello" myfs.ext2
Напишите « Hello » в myfile.txt
в файловой системе:
$ echo "Hello" > ./mnt/myfile.txt
$ sync
Проверьте, есть ли сейчас « Hello » (оно есть):
$ grep "Hello" myfs.ext2
Binary file myfs.ext2 matches
$ cat ./mnt/myfile.txt
Hello
Напишите « Aljoe » в myfile.txt
:
$ echo "Aljoe" > ./mnt/myfile.txt
$ sync
Проверьте, есть ли сейчас « Hello » (он все еще "на диске", но не в файле):
$ grep "Hello" myfs.ext2
Binary file myfs.ext2 matches
$ cat ./mnt/myfile.txt
Aljoe
Это будет работать как для простого echo
, так и для vim
.
Обновить
Я только что попробовал это на Windows (которая менее доступна для меня), и похоже, что и FAT, и NFTS будут повторно использовать выделенное хранилище, в то время как ext2/3/4 выделит новое хранилище.
Кроме того, краткий обзор Notepad++ и Atom показывают , что подход "писать и переименовать" не используется , как я ожидал , - в то время как она используется в таких приложениях, как vim
Я думаю, что более правильный ответ может быть:
- Если вы используете Windows, то данные, вероятно, будут немедленно перезаписаны.
- Если вы используете Linux, то данные, вероятно, остаются в постоянном хранилище.
« Вероятно », потому что есть, конечно, исключения из этих утверждений.