Я думаю, вы смущены относительно того, что на самом деле «действительная длина данных» означает. Проверьте this answer.
В принципе, в то время как SetEndOfFile
позволяет быстро увеличить длину файла и выделяет пространство на диске, если вы перейдете к (новому) концу файла для записи там, все дополнительно выделенное дисковое пространство должно будет быть перезаписанными нулями, что является медленным.
SetFileValidData
позволяет пропустить, что обнуление. Вы говорите системе: «Я в порядке с тем, что находится в этих блоках диска, продолжайте с ним». (Вот почему вам нужно SE_MANAGE_VOLUME_NAME
привилегию, как это могло бы раскрыть данные в льготных условиях unpriviledged пользователей, если вы не перезаписывать данные. Пользователи с это привилегия может получить доступ к данным необработанных дисков в любом случае.)
В любом случае, , вы установили новый эффективный размер файла. (Который вы может читать назад.) Что именно, должен отдельный отчет «читать файл действительных данных»? SetFileValidData
сказал системе, что все, что в этих дисковых блоках является «действительным» ...
Различного подходом объяснения:
documentation упоминает, что «действительная длиной данных» является отслежено; целью этого является то, что система должна знать, какой диапазон (от конечных действительных данных до конца файла) по-прежнему нуждается в нулевом, в контексте SetEndOfFile
, когда это необходимо (например, вы закрываете файл). Вы не нужно читать назад это значение, потому что единственный способ, которым это может быть другого от фактического файла размер происходит потому, что вы сами, так и изменить его с помощью вышеупомянутых функций ...
Кроме того, типичная «действительная длина данных» совпадает с фактическим размером файла. –
@JoachimPileborg Я не имею дело с типичным случаем ... – avim
Любопытно, не будете ли вы просто включать все байты, которые существуют на диске, которые находятся после окончания данных файла? – Marichyasana