Slavko wrote:
Работает только на дисках с NTFS системой и под Windows XP и старше.
Жду отзывов
Кодеры, вы хоть форум та читаете? давно уже решение давал для проблемы - SetEndOfFile. Что за ограничения? Откуда взялись? Что специального даёт эта ФС в вопросе "резервирования" места на диске? Ну вывалется на фате при > 2GiB и что? Так это фс проблемы а не API.
SetEndOfFile
...
Minimum supported client:
Windows 2000 Professional
Slavko wrote:
Работает только на дисках с NTFS системой и под Windows XP и старше.
Жду отзывов
Кодеры, вы хоть форум та читаете? давно уже решение давал для проблемы - SetEndOfFile. Что за ограничения? Откуда взялись? Что специального даёт эта ФС в вопросе "резервирования" места на диске? Ну вывалется на фате при > 2GiB и что? Так это фс проблемы а не API.
SetEndOfFile
...
Minimum supported client:
Windows 2000 Professional
SetEndOfFile проблему с задержкой при выделении места под файл не решает.
Закачивать его полностью ненужно, достаточно стартовать закачку и покачать секунд 30. Посмотреть будет ли подвисание для выделения места под файл (незабудьте включить опцию Резервировать место... в настройках). Особенно интересует работа под Vista.
Для тех кто не понимает о каком подвисании речь, можете выключить опцию "Резервировать место...", и стартовать закачку вышеуказанного файла (покачать в течении хотя-бы минуты двух).
Slavko wrote:
Можно вас еще попросить в конец созданного файла, после SetEndOfFile(hFile); записать еще пару килобайт информации.
ПРостите, не понял. Когда ставим конец файла, то файловый указатель соответственно стоит на конце файла.
программа забивает всё свободное место файлом, содержимое которого неопределено, но определён конечный размер = свободному месту на текущем диске.
Я видел структуру ваших файлов для закачки (т.е. место для файла+его координаты + др.нужная информация). Стратегия таже двигаем файловый указатель куда нужно ставим метку конца. чтобы начать работу сначала с файлом либо ставим указатель опять вначало либо заново переоткрываем файл.
Slavko wrote:
Можно вас еще попросить в конец созданного файла, после SetEndOfFile(hFile); записать еще пару килобайт информации.
ПРостите, не понял. Когда ставим конец файла, то файловый указатель соответственно стоит на конце файла.
программа забивает всё свободное место файлом, содержимое которого неопределено, но определён конечный размер = свободному месту на текущем диске.
Я видел структуру ваших файлов для закачки (т.е. место для файла+его координаты + др.нужная информация). Стратегия таже двигаем файловый указатель куда нужно ставим метку конца. чтобы начать работу сначала с файлом либо ставим указатель опять вначало либо заново переоткрываем файл.
Я имел ввиду передвинуть указатель назад на пару килобайт от конца и записать данные. Наверное непонятно выразился.
Можно даже проще, попробуйте после строки c вашим SetEndOfFile(hFile) записать байт данных в конец файла (в последний байт, туда где указатель стоит) через: WriteFile(...)
Речь шла о резервировании. я дал для вашего случая решение. даже с примером.
Ещё одно или несколько дать? Для вашего случая подойдут вот эти:
1. FILE_FLAG_OVERLAPPED
2. threading
Везде нужна синхронизация +осторожность в использовании.
Да действительно, система тратит какое-то время на инициализацию если сразу идёт запись в конец, но это не повод всё это делать в одном потоке где и ГУЙ обрабатывается и всё остальное. решение см.выше.