Показать сообщение отдельно
  #9  
Старый 14.02.2012, 00:17
RootDev RootDev вне форума
Прохожий
 
Регистрация: 12.12.2011
Сообщения: 7
Версия Delphi: 7
Репутация: 10
Счастье

Для эксперимента было использовано:

4Gb флешка Transcend (файловая система FAT)
Операционная система Windows XP x64 SP 2.
Приложение, написанное на Дельфи 7 версии. (файл объявлялся как textfile и писался построчно, порциями по 100 Кб.)

Суть эксперимента такова.
1) Флешка забивается файлами разной длины, от 100 до 900 мегабайт, оставляя свободным около 30 Мегабайт.
2) После чего, приложение открывает выбранный 700 Мб файл на флешке, начинет в него запись порядка 300 мегабайт, но не закрывает файл и завершается.

Результат очень удивил:
Файл изменил свой размер с 700 до, впринципе ожидаемых 300 мегабайт, высвободив 400 Мб свободного пространства. Более того, системный кеш начал интенсивно набирать размеры и увеличился, в среднем, на 200 Мб. Сработал принцип отложеной записи. Приложение дало команду на запись 300 метров в файл, успешно получило подтверждение на запись и продолжило работу, в то время как система сбросила эти данные в кеш, и, уже в фоне продолжала активно писать на флешку, о чем свидетельствовал постоянно увеличивающийся размер файла и мерцающий индикатор записи на самом носителе. При этом сам исполняемый файл сообщил, что работу он закончил.

Итоги.
При записи данных в файл, который имеет определенную длинну, так и вновь созданный, все данные в файле затираются новыми, при этом не имеет значения, вызываете вы метод closefile или нет. Данные попадут в файл в любом случае, затерев предыдущие. Фактически, это дает основание полагать что функция closefile просто уничтожает указатель на файл и объявляет системе, что данный файл свободен. Обращаю внимание — что ПО реализовывалось в Delphi 7. Методы Visual Studio и прочих сред разработки могут отличаться — не тестировал.
Ответить с цитированием