Я использую VB6 и Win32 API для записи данных в файл, эта функция предназначена для экспорта данных, поэтому запись производительности на диск является ключевым фактором в моих соображениях. Поэтому я использую опции FILE_FLAG_NO_BUFFERING
и FILE_FLAG_WRITE_THROUGH
при открытии файла с вызовом CreateFile
.Как вы пишете конец файла, открытого с помощью FILE_FLAG_NO_BUFFERING?
FILE_FLAG_NO_BUFFERING
требует, чтобы я использовал свой собственный буфер и записывал данные в файл в кратном размере сектора диска, это не проблема, как правило, помимо последней части данных, которая, если она не является точной кратной размер сектора будет включать в себя заполнение файла символом нуль, как установить размер файла после записи последнего блока, чтобы не включать эти нули символов?
Я могу использовать SetEndOfFile
, но это требует от меня закрыть файл и повторно открыть его, не используя FILE_FLAG_NO_BUFFERING
. Я видел, что кто-то говорил о NtSetInformationFile
, однако я не могу найти, как использовать и объявить это в VB6. SetFileInformationByHandle
может делать именно то, что я хочу, но он доступен только в Windows Vista, мое приложение должно быть совместимо с предыдущими версиями Windows.
Это очень интересный момент, я намеревался сравнить различные способы написания файла, но, тем не менее, спасибо за ваше предложение. Что побудило меня попробовать этот метод, было сообщение в блоге (http://www.winasm.net/forum/index.php?showtopic=794) на winasm.net. – AnturCynhyrfus 2008-09-29 10:04:23
Хотя вы можете быть правы в этом конкретном случае, это не ответ на вопрос. – 2011-01-13 22:47:13